DCL操作之COMMIT和ROLLBACK操作
COMMIT : 提交数据
- 一旦执行了了commit操作之后,数据就被永久的保存在了数据库中,意味着数据不可以回滚( 也就是不能rollback)
ROLLBACK : 回滚数据
- 一旦执行了rollback操作之后,就可以实现数据的回滚,就会回滚到最近的一次commit之后
对于COMMIT和ROLLBACK操作在DDL和DML中的说明:
- DDL操作一旦执行就不可以回滚,指令set autocommit = false对DDL操作无效(因为在执行完DDL操作之后就一定会执行一次commit操作,并且此commit操作不受 "set autocommit = false"影响)
- 也就是在DDL操作执行之后会自动的保存(commit),并且set autocommit = false失效
- 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操作之后我们才查询就会发现表中的数据又回来了