这篇文章讲的是ORACLE数据库中的事物,如有错误或不当之处,还望各位大神批评指正。
什么叫事物?
事物是一种逻辑操作单元,将数据库中的记录从一种状态转换成另一种状态(如:添加一条数据)由一个或多个DML语句,或一个DDL语句,或一个DCL语句组成,其中DDL是自动提交的。
数据说明
用户表T_USER结构如下:
字段 | 类型 | 长度 | 主键 | 为空 |
---|---|---|---|---|
id | number | 6 | 是 | 否 |
姓名 | char | 20 | 否 | 是 |
年龄 | number | 2 | 否 | 是 |
性别 | char | 2 | 否 | 是 |
日期 | date | - | 否 | 是 |
分数 | float | - | 否 | 是 |
初始数据
数据控制语言DCL
commit 就是确定提交的意思,比如你用SCOTT账户登录数据库insert到表中一条记录,而不commit,那么别的账户在登录这个数据库时就查询不到你insert 的记录;而commit后则其他账户就能查询到你insert的记录了。
rollback就是回滚的意思,比如你用test账户登录数据库delete表中一条记录,这时你查询这个表时,则delete的记录不存在;再rollback后,你再查询你delete的记录时,发现被删除的记录又回来了,rollback操作是返回上一次的commit之后状态。
savepoint是为数据库设置一个存档点,可以rollback回来。
commit语句与rollback语句
- 将t_user表中‘张三’的成绩修改为90(不提交)
update t_user
set u_score = 90
where u_name = '张三'
执行结果:
执行rollback语句后
- 将t_user表中‘张三’的成绩修改为90(提交)
update t_user
set u_score = 90
where u_name = '张三';
commit ;
执行rollback语句后
注:说明rollback回滚的是上一个commit后的状态。
savepoint语句
- 将‘李四’的成绩改为60,并设置存档点A
update t_user
set u_score = 60
where u_name = '李四' ;
savepoint A
执行结果:
- 将‘王五’的成绩改为60,并设置存档点B
update t_user
set u_score = 60
where u_name = '王五' ;
savepoint B
执行结果
- 回到存档点A
rollback to savepoint A ;
执行结果:
提交与回滚前的数据状态
当一个用户对数据库进行DML操作时,在提交前其他用户不能看到修改后的数据;当一个用户对数据库进行DML操作时,所涉及的行将会被锁定,其他用户不能进行操作;