欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

事务之COMMIT/ROLLBACK

程序员文章站 2022-07-13 10:32:54
...
数据库事务起始于SQL语句,终止于以下4种事件之一:1、COMMIT或ROLLBACK语句
2、DDL/DCL隐式提交 3、用户退出时自动提交 4、系统强行关闭时取消事务
事务结束后,下一条SQL语句将开始一个新的事务。

语句功能:
    COMMIT 结束当前事务,并将所有数据变更提交数据库生效
    SAVEPOINT  name 在当前事务内部创建一个保存点
    ROLLBACK  [TO  SAVEPOINT  name] ROLLBACK指令结束当前事务,并取消所有数据变   更。
    ROLLBACK TO SAVEPOINT name放弃该保存点,并取消所有在保存点之后的数据变更

隐式事务提交:
    一个事务在下列情况下会被自动提交:DDL语句 DCL语句;用户正常退出数据库,而缺少显式的COMMIT或者ROLLBACK.
   一个事务在下列情况下会被自动回退;用户异常退出数据库;系统强行关闭.

数据在COMMIT/ROLLBACK前的状态:
    事务中所有数据变更都会被临时存放在数据库的缓冲池中,直到事务被提交或者回退。因而事务中早先的状态是可以被恢复的。
    用户可以通过SELECT语句查询自己发起事务的数据变更,即使事务未被提交。但不能看到他人发起事务中未被提交的数据。
    用户发起事务中的变更数据将被数据库系统锁定。除该用户外,其他用户不能对锁定的数据进行变更操作,直到锁定的数据被提交或回退。

数据在COMMIT后的状态:
    数据变更在数据库中正式生效
    数据不可被还原
    所有用户可以看到变更数据
    数据锁将被释放,一度被锁定的数据重新可以被所有用户修改
    所有的保存点(savepoint)都被清除

数据在ROLLBACK后的状态:
    所有数据变更都取消,数据状态恢复到事务开始前
    数据锁将被释放,一度被锁定的数据重新可以被所有用户修改

回退到一个保存点:
    使用SAVEPOINT语句创建一个保存点。如果保存点名称已经存在,则新的保存点将覆盖旧的保存点。
    使用ROLLBACK  TO  SAVEPOINT语句回退到已有保存点状态

总结一下:
    1.没有提交(commit)的数据删除后无法rollback
    2.提交(commit)了的数据删除后可以使用rollback恢复
    3.删除数据后提交(commit)则无法使用rollback恢复