当前位置:网站首页>16MySQL之DCL 中 COMMIT和ROllBACK

16MySQL之DCL 中 COMMIT和ROllBACK

2022-04-23 20:17:00 gh-xiaohe

作者: gh-xiaohe
gh-xiaohe的博客
覺得博主文章寫的不錯的話,希望大家三連(關注,點贊,評論),多多支持一下!!

DCL 中 COMMIT和ROllBACK

DCL 中 COMMIT和ROllBACK

COMMIT

     COMMIT:提交數據。一旦執行COMMIT,則數據就被永久的保存在了數據庫中,意味著數據不可以回滾。

ROLLBACK

     ROLLBACK:回滾數據。一旦執行ROLLBACK,則可以實現數據的回滾。回滾到最近的一次COMMIT之後。

對比

  • 相同點:都可以實現對錶中所有數據的删除,同時保留錶結構。
  • 不同點:
    • TRUNCATE TABLE:一旦執行此操作,錶數據全部清除。同時,數據是不可以回滾的。
    • DELETE FROM:一旦執行此操作,錶數據可以全部清除(不帶WHERE)。同時,數據是可以實現回滾的。

DDL 和 DML 的說明

    ① DDL的操作一旦執行,就不可回滾。指令SET autocommit = FALSEDDL操作失效。(因為在執行完DDL操作之後一定會執行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影響的。)

    ② DML的操作默認情况,一旦執行,也是不可回滾的。但是,如果在執行DML之前執行了 SET autocommit = FALSE,則執行的DML操作就可以實現回滾

案例

COMMIT、DELETE

# 演示:DELETE FROM 
#1)
COMMIT;
#2)
SELECT *
FROM myemp3;
#3)
SET autocommit = FALSE;
#4)
DELETE FROM myemp3;
#5)
SELECT *
FROM myemp3;
#6)
ROLLBACK;
#7)
SELECT *
FROM myemp3;

在這裏插入圖片描述

COMMIT、 ROLLBACK

# 演示:TRUNCATE TABLE
#1)
COMMIT;
#2)
SELECT *
FROM myemp3;
#3)
SET autocommit = FALSE;
#4)
TRUNCATE TABLE myemp3;
#5)
SELECT *
FROM myemp3;
#6)
ROLLBACK;
#7)
SELECT *
FROM myemp3;

在這裏插入圖片描述

MySQL8.0的新特性:DDL的原子化

     在MySQL 8.0版本中,InnoDB錶的DDL支持事務完整性,即DDL操作要麼成功要麼回滾。DDL操作回滾日志寫入到data dictionary數據字典錶mysql.innodb_ddl_log(該錶是隱藏的錶,通過show tables無法看到)中,用於回滾操作。通過設置參數,可將DDL操作日志打印輸出到MySQL錯誤日志中。

分別在MySQL 5.7版本和MySQL 8.0版本中創建數據庫和數據錶,結果如下:

CREATE DATABASE mytest; # 創建數據庫 mytest

USE mytest; # 切換到 mytest 數據庫下

CREATE TABLE book1( # 創建 book1 錶
book_id INT ,
book_name VARCHAR(255)
);

SHOW TABLES; # 查看當前數據下的錶

在這裏插入圖片描述

(1)在MySQL 5.7版本中,測試步驟如下:

# 在 mysql5.7 下
DROP TABLE book1,book2;  # 此時删除數據庫 book1 和 book2 注意此時沒有 book2

SHOW TABLES;

在這裏插入圖片描述

(2)在MySQL 8.0版本中,測試步驟如下:

# 在 mysql8.0 下
DROP TABLE book1,book2;  # 此時删除數據庫 book1 和 book2 注意此時沒有 book2

SHOW TABLES;

在這裏插入圖片描述

版权声明
本文为[gh-xiaohe]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204232017307463.html