一 数据更新(重点)

===============
增删改      查

  • 数据更新包括数据的增加、修改、删除。
  • 为了做实验,我们将emp表复制一份,使用以下指令:
  • create table myemp as select * from emp;
  • 这种语法是oracle支持的,其他的数据库不一样

1、数据的增加(insert)

语法:
INSERT INTO 表名称 [(字段1,字段2,字段3,...)] VALUES(值1,值2,值3,...)注意:如果需要进行增加数据的话,则以下的几种数据类型要分别处理:增加数字:直接编写数字,如:123;增加字符串:字符串应该使用"'"声明;增加DATE数据:第一种:可以按照已有的字符串的格式编写字符串,如:‘20-6月-06’;第二种:利用TO_DATE函数将字符串变为DATE型数据;第三种:如果设置的时间为当前系统时间,则使用SYSDATE;
对于数据的增加有两种操作格式:完整型:
SQL> insert into myemp(empno,ename,hiredate, sal,mgr,job,comm)2  values (8888,'reyn',to_date('1990-11-13','yyyy-mm-dd'),8000,7369,'daza',1000);
SQL> insert into myemp (empno,ename,hiredate,sal,mgr,job,deptno) 2  values(8889,'hahah',sysdate,3000,7369,'daza',30);简单型:(不写列名称)
SQL> insert into myemp2  values(8890,'xixi',sysdate,3000,7369,'daza',40);    XXXX
ORA-00947: not enough values正确:需要按照列名称的顺序来写,必须符合字段的要求,一般开发中不使用
SQL> insert into myemp values(2  8899,'xixi','daza',7369,sysdate,3000,null,30);

2、数据的修改(update)

语法:
UPDATE 表名称 SET 更新字段1=更新值1,更新字段2=更新值2,...[WHERE 更新条件(s)];SQL> update myemp set sal=7000,comm=3000,job='manager',hiredate=sysdate where empno=7369;//更新编号为7369的员工,工资为7000,奖金3000,职位 manager,职位更新时间为当前时间
SQL> update myemp set sal=7500;                    //更新所有员工工资为7500
SQL> rollback;                                    //回滚数据
SQL> update myemp set empno=7788 where empno=7369;  //更新编号为7369的员工部门为7788

3、数据的删除(dalete)

数据的删除
语法:
DELETE FROM 表名称 [WHERE 删除条件(s)];SQL> delete from myemp where to_char(hiredate,'yyyy')=1987;    //删除1987年入职的员工注意:如果删除的时候没有相应匹配条件的时候,则更新记录为0,更新操作也一样。
SQL> delete from myemp;                            //删除myemp表中所有数据
SQL> select * from myemp;注意:对于删除操作,尽可能少使用,因为删除操作对于查询操作要危险许多。提示:对于删除操作,在开发时对于所有的删除操作之前先给出一个提示框,以防止误删除。

二  事务处理

=========
    对于数据表的操作,查询要比更新操作更安全,因为更新操作有可能会出现错误,导致没有按照既定的要求正确的完成更新操作。
    在很多时候更新可能由多条语句共同完成,如银行转账:
        -判断A的账户上是否有5000W     select yue+shouxufei>5000+sxf from zhanghu where id=a
        -判断B的账户状态是否正常      select id,status from zhanghu where id=b
        -从A的账户上移走5000W         update zhanghu set yue-5000 where id=a
        -向B的账户上增加5000W          update zhanghu set yue+5000 where  id=b
        -向银行支付手续费5W           update zhanghu set yue+shouxufei where id=yinhang
    以上五个数据操作是一个整体,可以理解为一个完整的业务,如果其中第三点出错,其他操作该怎么办?
    如果有操作出现错误,那么其他操作应该不再继续执行,并且都回归到最原始的状态,而这一个流程的操作实际上就是事务的操作。
#回滚之前的操作
rollback;


#再次查看myemp表,确认其中的数据情况
SQL> select * from myemp;所有的事务处理都是针对每一个会话进行的,在oracle中,把每一个连接到数据库的用户都称为一个会话,每一个会话之间彼此独立,互不通信,每一个会话独享自己的事务控制,而事务控制之中主要使用两个命令:事务的回滚:ROLLBACK,更新操作回到原点事务的提交:COMMIT,真正的发出更新请求,一旦提交后无法回滚eg:
#在会话1中删除一条数据,从另一个会话来查询数据会话1  delete from myemp where empno=7369;会话1 select * from myemp;会话2 select * from myemp;#在会话1中回滚之前的更新操作,再次删除数据,然后提交,再在两个会话中查询数据,在会话1中进行回滚发现已经无法回滚了。会话1 delete from myemp where empno=7369;会话1 commit;会话1  select * from myemp;会话2 select * from myemp;注意:这种事务控制会出现一些问题,例如,某一个会话在更新数据表的时候还没有提交事务,其他会话是无法进行更新的,必须等待之前的会话提交后才可以。
eg:
#死锁,会话1执行更新后,在没有提交之前,会话2进行更新会出现等待会话1  update myemp set sal=9000 where empno=7839;会话2    update myemp set sal=8000 where empno=7839;这种问题从大的方面来讲可以称作死锁,但是在oracle之中死锁有很多种类.所有的数据更新一定都会受到事务的控制。

三 数据伪列

ROWNUM(重点)
    ROWNUM为每一个显示的记录都会自动的随着查询生成的行号。

SQL> select rownum,empno,ename,job,hiredate,sal from emp;//#查询emp表的rownum,empno,ename,job,hiredate和sal
该行号不是永久的,会随着查询的显示变化而变化SQL> select rownum,empno,ename,job,hiredate,sal from emp where deptno=30;//#查询emp表的rownum,empno,ename,job,hiredate和sal
SQL> select rownum,empno,ename,job,hiredate,sal from emp where rownum<=5;//#查询前五条记录#查询6-10行记录
错误查询:
SQL> select rownum,empno,ename,job,hiredate,sal from emp where rownum between 6 and 10;
//执行完成后并没有返回任何数据,因为rownum不是真实列,正确的思路是先查询前10条记录,然后再查询后5条记录,需要使用子查询
正确查询:
SQL> select * from (select rownum rn,empno,ename,job,hiredate,sal from emp2  where rownum<=10) temp where temp.rn> 5;

ROWID
    ROWID表示的是每一行数据保存的物理地址的编号。

SQL> select rowid, deptno, dname, loc from dept;每一条记录的ROWID都不会重复,所以即使所有列的内容重复,ROWID也不会重复.
格式为:AAAL+XAAEAAAAANAAA其中:    数据对象号:AAAL+X相对文件号:AAE数据块号:    AAAAAN数据行号:  AAA

总结:
1、多表查询:在进行查询语句编写的时候,一定要确定所需要关联的数据表,而且只要是表的关联查询,就一定会存在笛卡儿积的问题,使用关联字段消除此问题。在使用多表查询的时候要考虑到左右连接的问题,oracle之外的数据库可以使用SQL1999语法控制左右连接。
2、所有的统计函数是用于进行数据统计操作的,而统计要在分组中进行/或者是单独使用,分组使用GROUP BY子句,是在某一列上存在重复数据的时候才会使用分组操作,而分组后的过滤使用HAVING子句完成,所有的分组函数可以嵌套,但是嵌套之后的分组函数之中不能再有其他的查询字段,包括分组字段。
3、子查询:结合限定查询、多表查询、分组统计查询完成各个复杂查询的操作,子查询一般在WHERE和FROM之后出现较多。
4、数据库的更新操作一定要受到事务的控制,事务的两个命令:COMMIT,ROLLBACK,每一个连接到数据库上的用户都用一个会话来表示。
5、数据表的分页查询显示依靠ROWNUM伪列,这个在以后的开发当中必定要使用。

day03: oracle的sql增 、删、改,事务处理相关推荐

  1. datatable更新到mysql_.NET_使用DataTable更新数据库(增,删,改),1、修改数据复制代码 代码如 - phpStudy...

    使用DataTable更新数据库(增,删,改) 1.修改数据 DataRow dr = hRDataSet.Tables["emp"].Rows.Find(textBox3.Tex ...

  2. 表单的增 删 改 查

    django单表操作 增 删 改 查 一.实现:增.删.改.查 1.获取所有数据显示在页面上 model.Classes.object.all(),拿到数据后,渲染给前端;前端通过for循环的方式,取 ...

  3. properties(map)增.删.改.查.遍历

    import java.util.Map; import java.util.Properties; import java.util.Set;/*** properties(map)增.删.改.查. ...

  4. python学生姓名添加删除_python-函数-实现学生管理系统,完成对学员的增,删,改,查和退出学生管理系统。...

    实现学生管理系统,完成对学员的增,删,改,查和退出学生管理系统. 要求1:使用一个list用于保存学生的姓名. 要求2:输入0显示所有学员信息,1代表增加,2代表删除,3代表修改,4代表查询,exit ...

  5. java stringbuilder 替换字符串_StringBuilder修改字符串内容,增,删,改,插

    package seday01; /** * 字符串不变对象特性只针对字符串重用,并没有考虑修改操作的性能.因此String不适合频繁修改内容. * 若有频繁修改操作,使用StringBuilder来 ...

  6. PySpark︱DataFrame操作指南:增/删/改/查/合并/统计与数据处理

    笔者最近需要使用pyspark进行数据整理,于是乎给自己整理一份使用指南.pyspark.dataframe跟pandas的差别还是挺大的. 文章目录 1.-------- 查 -------- -- ...

  7. oracle 主键 字典表,oracle 增 删 改 查 新建表 主键 序列 数据字典

    ------------数据字典------------ select * from dba_tab_cols a where a.table_name='DEMO' create table dem ...

  8. SQL语句(三) 更新语句(增 删 改)

    一.插入 INSERT INTO 表名(列名1,列名2--)//列名可以省略,省略情况下是表格的所有列 VALUES(常量1,常量2--)//与上句中的列对应 二.修改 UPDATE 表名 SET 列 ...

  9. 简单的php数据库操作类代码(增,删,改,查)

    数据库操纵基本流程为: 1.连接数据库服务器 2.选择数据库 3.执行SQL语句 4.处理结果集 5.打印操作信息 其中用到的相关函数有 •resource mysql_connect ( [stri ...

最新文章

  1. 【转】如何编译一个内核 - Ubuntu方式
  2. VM虚拟机 Windows虚拟机中linux鼠标不能动怎么办
  3. springboot:实现分页查询,以及翻页功能
  4. Ubuntu 建立tftp服务器
  5. Linux下内存泄露工具
  6. 5-3 神经网络算法预测销量高低(改进版,消除了一些warning)
  7. leetcode53. 最大子数组和(动态规划)
  8. 前端学习(148):html和xhtml的区别
  9. c++头文件包含问题
  10. 基于深度学习的图像风格转换
  11. 在java中使用ffmpeg将amr格式的语音转为mp3格式
  12. android studio或者IntelliJ代码样式的设置
  13. movcms能安装PHP吗,LzCMS-博客版 手动安装方法
  14. linux命令详解——sar
  15. 实践任务1:利用 HBuilderX制作产品展示模块+实践任务2:利用 HBuilderX制作公司网站首页+实践任务3: 利用 HBuilderX制作公司网站首页实现固定侧边菜单
  16. 2017.10.19 測試總結并今日總結
  17. qemu网络配置-桥接-IOT固件模拟
  18. linux命令后台执行方式
  19. winwebmail设置 小记
  20. 晴天科技冲刺上市:实控人丁一波系本科肄业,粤民投为其股东

热门文章

  1. 冒泡排序和鸡尾酒排序(改进的冒泡排序)
  2. FTP登录时指定用户名密码的方法
  3. 理解 RXSwift:单元测试(四)
  4. ZooKeeper安装及配置(Windows系统下)
  5. [博客之路]如何增加一个博客的PR值(一)
  6. Leetcode 103.二叉树的锯齿形层序遍历
  7. 三种活体检测方式分析
  8. 深度学习之利用TensorFlow实现简单的卷积神经网络(MNIST数据集)
  9. 人工智能技术为大脑制作地图 前沿
  10. 人工智能伦理体系:基础架构与关键问题