DCL操作之COMMIT和ROLLBACK [MySQL][数据库]

DCL操作之COMMIT和ROLLBACK操作

COMMIT : 提交数据

  • 一旦执行了了commit操作之后,数据就被永久的保存在了数据库中,意味着数据不可以回滚( 也就是不能rollback)

ROLLBACK : 回滚数据

  • 一旦执行了rollback操作之后,就可以实现数据的回滚,就会回滚到最近的一次commit之后

对于COMMIT和ROLLBACK操作在DDL和DML中的说明:

  1. DDL操作一旦执行就不可以回滚,指令set autocommit = false对DDL操作无效(因为在执行完DDL操作之后就一定会执行一次commit操作,并且此commit操作不受 "set autocommit = false"影响)
    • 也就是在DDL操作执行之后会自动的保存(commit),并且set autocommit = false失效
  2. DML操作默认情况之下一旦执行也是不可以回滚的,但是如果我们执行DML操作之前,执行了set autocommit = false,则执行的DML操作之后就不会自动保存,也就是说对于DML操作而言: 如果我们在执行DML操作之前我们进行了set autocommit = false,那么这个时候执行完只会我们可以通过ROLLBACK来回滚(也就是撤销执行的DML操作)

总结: DDL一定是自动保存的,而DML默认也是自动保存,但是可以设置为不自动保存

对比TRUNCATE TABLE和DELETE FROM操作的差异:

  • 这里的truncate属于DDL操作,delete from属于DML操作

相同点: 都可以实现对表中所有数据的删除,同时保留表结构

不同点: 一旦执行了truncate table操作之后,表数据就会全部清除,同时数据也是不可以回滚的,但是执行了delete from操作之后,如果不带where子句,这个时候才会将表中数据全部清空,同时删除的数据可以恢复

这里我们通过一个例子来理解DELETE FROM操作执行后数据可回滚和执行TRUNCATE TABLE操作之后数据不可回滚
COMMIT;

SELECT * FROM emp3;

SET autocommit = FALSE;

DELETE FROM emp3;

SELECT * FROM emp3;

ROLLBACK;

SELECT * FROM emp3;
  • 上面这里我们执行的是delete from操作,在执行这个delete from操作之前我们就设置了set autocommit = false,然后才进行了删除操作将我们表中的数据都删除掉,然后最后我们再执行一次rollback操作.,当我们执行完rollback操作之后我们才查询就会发现表中的数据又回来了

注意: 如果我将上面的delete from emp3替换成 truncate table emp3我们就会发现即使后面我们执行了rollback操作,这个时候我们查询后会发现表中的数据还是没有回来,表还是一个空表

猜你喜欢

转载自blog.csdn.net/m0_57001006/article/details/123625812
今日推荐