mysql 事务回滚_SQL基础丨事务处理
事務的特性:ACID
MySQL5.5版本之前,默認的存儲引擎是MyISAM,在5.5版本之后默認存儲引擎是InnoDB。兩者唯一的區別就是InnoDB支持事務。
事務的英文是transaction,它是進行一次處理的基本單元,要么完全執行,要么都不執行。
事務的四個特性:
- 原子性(Atomicity)。原子的概念就是不可分割,是進行數據處理操作的基本單位
- 一致性(Consistency)。一致性指的就是數據庫在進行事務操作后,會由原來的一致狀態,變成另一種一致的狀態。
- 隔離性(Isolation)。每個事務都是彼此獨立的,不受到其他事務的執行影響。
- 持久性(Durability)。事務提交之后對數據的修改是持久的,即使在系統出故障的情況下,如系統崩潰或者存儲介質發生故障,數據的修改依然是有效的。
原子性是基礎,隔離性是手段,一致性是約束條件,而持久性是目的
事務的控制
事務的常用控制語句
- START TRANSACTION 或者 BEGIN,作用是顯式開啟一個事務。
- COMMIT:提交事務。當提交事務后,對數據庫的修改是永久性的。
-?ROLLBACK 或者 ROLLBACK TO?[SAVEPOINT],意為回滾事務。意思是撤銷正在進行的所有沒有提交的修改,或者將事務回滾到某個保存點。
-?SAVEPOINT:在事務中創建保存點,方便后續針對保存點進行回滾。一個事務中可以存在多個保存點。
- RELEASE SAVEPOINT:刪除某個保存點。
- SET TRANSACTION:設置事務的隔離級別。
使用事務的兩種方式,分別是隱式事務和顯式事務。隱式事務實際上就是自動提交,Oracle默認不自動提交,需要手寫COMMIT命令,而MySQL默認自動提交。
配置MySQL的參數
mysql>?set?autocommit?=0;??//關閉自動提交mysql> set autocommit =1; //開啟自動提交示例
CREATE TABLE test(name varchar(255), PRIMARY KEY (name)) ENGINE=InnoDB;BEGIN;INSERT INTO test SELECT '關羽';COMMIT;BEGIN;INSERT INTO test SELECT '張飛';INSERT INTO test SELECT '張飛';ROLLBACK;SELECT * FROM test;運行結果(1行數據)
在這個事務中,整個SQL一共執行了2個事務,第一個是插入“關于”,提交后執行成功,第二個是插入兩次“張飛”,這里將name設置為主鍵,也就是說主鍵的值是唯一的,那么第二次插入“張飛”時就會產生錯誤,然后執行ROLLBACK相當于對事務進行了回滾,所以最終結果只有一行數據。也就是第一個事務執行之后的結果。
CREATE TABLE test(name varchar(255), PRIMARY KEY (name)) ENGINE=InnoDB;BEGIN;INSERT INTO test SELECT '關羽';COMMIT;INSERT INTO test SELECT '張飛';INSERT INTO test SELECT '張飛';ROLLBACK;SELECT * FROM test;運行結果(2行數據)
之前兩次插入“張飛”放到一個事務里,而這次操作它們不在同一個事務里,那么對于MySQL來說,默認情況下這實際上就是兩個事務,因為在autocommit=1的情況下,MySQL會進行隱式事務,也就是自動提交,因此在進行第一次插入“張飛”后,數據表里就存在了兩行數據,而第二個插入“張飛”就會報錯。
最后在執行ROLLBACK的時候,實際上事務已經自動提交了,沒法進行回滾了。
總結
總結
以上是生活随笔為你收集整理的mysql 事务回滚_SQL基础丨事务处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 500万用户 表_500万用户的社交电商
- 下一篇: linux下载软件后环境变量配置(最详细