oracle回滚上一个更新语句,oracle学习笔记九——插入更新和删除(DML语句)

九、插入更新和删除

SQL语句的类型:

1.DML语句(Data Manipulation Language 数据操作语言):

insert delete update select

2.DDL语句(Data Definition Language 数据定义语言):

create/drop/alter table, truncate table

create/drop view, create/drop index,

3.DCL语句(Data Control Language 数据控制语句):

commit rollback

1.插入语句:insert

(1)INSERT 语句语法

INSERT INTO table [(column [, column...])]

VALUES (value [, value...]);

--使用这种语法一次只能向表中插入一条数据

(2)一次只向表中插入一条数据

--insert:table后列出全部列名

insert into emp(empno, ename, job,mgr,hiredate,sal,comm,deptno)

values(1001, 'Tom','Engineer',7839,sysdate, 3000,100,10);

补:

当要对所有列插入值时,table后面的括号及其里面的列名可以省略

--隐式插入空值(除列出的列外,其他列默认输入空值)

insert into emp(empno, ename, sal, deptno)

values(1002, 'Mike',3000,20)

--显式插入空值

insert into emp(empno, ename, job, sal, deptno)

values(1002, 'Mike', null, 3000, 20)

--回滚(oracle自动开启事务)

rollback

--地址符 &

insert into emp(empno, ename, sal, deptno)

values(&empno, '&ename', &sal, &deptno);

-->结果:

993ce14f025b

地址符 &:相当于为sql语句定义了一个形参

注:关于地址符

(1)&变量放在VALUES子句中

(2)执行时,会提示输入对应变量的值,注意’&ename',这列引号也可以不加,但那样在键入值的时候就必须加上引号。最好像示例这样写

(3)在DML语句中使用地址符:可以在任何位置

SQL>select empno,ename,&t

from emp;

(3)一次插入(拷贝)多条记录

--在创建表(create语句)时使用子查询

--where条件无效就不会有数据进去,只是拷贝了emp的数据结构

SQL>create table emp10

as select * from emp where 1=2

说明:

(1)where条件无效就不会有数据进去,只是拷贝了emp的数据结构

(2)create语句的子查询没有括号,但有"as"关键字

--在 INSERT 语句中加入子查询

SQL>insert into emp10

select * from emp where deptno=10;

注:

(1)不必书写 VALUES 子句。

(2)插入语句的子查询没有括号,没有"as"关键字

(3)子查询中的值列表应与 INSERT 子句中的列名对应

2.更新语句:update

(1)UPDATE 语句语法:

UPDATE table

SET column = value [, column = value, ...]

[WHERE condition];

注:

(1)可以一次更新多列数据。

(2)可以一次更新多条数据,看选中了多少行了。

(3)update的子查询(set或者where等后面都可以接)有括号

(4)强烈建议,更新数据时检查where条件

--示例:

UPDATE emp

SET empjob = (SELECT empjob

FROM emp

WHERE empno = 7902),

sal = (SELECT sal

FROM emp

WHERE empno = 7369)

WHERE empno=7839;

--现在可以回滚,后面介绍oracle中的事务

rollback;--DML语句不会自动提交

3.删除数据:delete

(1)删除单条数据

--加上where,可以只删除指定删除的记录

--如果省略WHERE子句,则表中的全部数据将被删除。

delete from emp where empno=7839

(2)清空表

--delete属于DML语句,即使commit后也有方法可以撤销

delete from emp10

--truncate属于DDL语句,不可以撤销,这真的要“从删库到跑路了”

truncate table emp10

注:delete和truncate的区别

1.delete是DML语句,truncate是DDL语句

2.delete数据逐条删除,truncate先摧毁再重建,在oracle中delete好,而不是truncate.判读依据是:指执行时间,oracle对delete进行了优化

3.delete会产生碎片,truncate不会

4.delete不会释放空间,tuncate会

5.delete没提交(commit)时,可以rollback,提交(commit)后,可以被闪回(flushback)(,truncate都不可以

补:sqlplus命令

--是否显示:已选择xx行

set feedback off

set feedback on

4.oracle中事务

事务是由完成若干项工作的DML语句组成的,oracle中事务:

(1)事务的起始标志:DML语句。意味着自动开启事

(2)事务的结束标志:

提交:显式提交 commit

隐式提交 执行DDL语句/正常退出(输入exit)

回滚:显式回滚 rollback

隐式回滚 掉电/宕机/非正常退出(点叉号)

控制事务

993ce14f025b

控制事务示意图(DML语句会自动开启事务)

--举个例子

--存储点savepoint:方便控制事务

SQL>create table testsavepoint(

tid number,

tname varchar2(20)

);

SQL>insert into testsavepoint values(1, 'Tom');

SQL>insert into testsavepoint values(2, 'Mary');

SQL>savepoint a;

SQL>insert into testsavepoint values(3, 'Moke');

SQL>rollback to savepoint a;

SQL>commit;

--查询下效果:

SQL> select * from testsavepoint;

-->结果:

993ce14f025b

没有全部回滚完,只回滚到我们设置的savepoint处

5.补充:oracle中的隔离级别

(1)对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:

--脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.

--不可重复读: 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.

--幻读: 对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.

(2)数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题.

(3)一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱

--sql99标准

(1)数据库提供的 4 种事务隔离级别:

993ce14f025b

sql99标准的 4 种事务隔离级别  (2)Oracle 支持的 2 种事务隔离级别:READ COMMITED(默认), SERIALIZABLE. Oracle 默认的事务隔离级别为: READ COMMITED

【oracle自己实现了一个——read only(不是sql99标准)。所以oracle支持3种隔离级别】

(3)Mysql 支持 4 中事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE READ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值