day03: oracle的sql增 、删、改,事务处理
一 数据更新(重点)
===============
增删改 查
- 数据更新包括数据的增加、修改、删除。
- 为了做实验,我们将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的员工部门为77883、数据的删除(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;
三 数据伪列
ROWNUM(重点)
ROWNUM为每一个显示的记录都会自动的随着查询生成的行号。
ROWID
ROWID表示的是每一行数据保存的物理地址的编号。
总结:
1、多表查询:在进行查询语句编写的时候,一定要确定所需要关联的数据表,而且只要是表的关联查询,就一定会存在笛卡儿积的问题,使用关联字段消除此问题。在使用多表查询的时候要考虑到左右连接的问题,oracle之外的数据库可以使用SQL1999语法控制左右连接。
2、所有的统计函数是用于进行数据统计操作的,而统计要在分组中进行/或者是单独使用,分组使用GROUP BY子句,是在某一列上存在重复数据的时候才会使用分组操作,而分组后的过滤使用HAVING子句完成,所有的分组函数可以嵌套,但是嵌套之后的分组函数之中不能再有其他的查询字段,包括分组字段。
3、子查询:结合限定查询、多表查询、分组统计查询完成各个复杂查询的操作,子查询一般在WHERE和FROM之后出现较多。
4、数据库的更新操作一定要受到事务的控制,事务的两个命令:COMMIT,ROLLBACK,每一个连接到数据库上的用户都用一个会话来表示。
5、数据表的分页查询显示依靠ROWNUM伪列,这个在以后的开发当中必定要使用。
总结
以上是生活随笔为你收集整理的day03: oracle的sql增 、删、改,事务处理的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Windoes普通用户使用管理员下安装的
- 下一篇: day06 : 01 Oracle 体