關系型數據庫---MySQL---事務
1、概述
1.1 事務:在對業務相關的一系列數據進行操作時,需要保證數據操作的完整性(要麽全部成功、要麽全部失敗);
1.2 MySQL中支持事務的存儲引擎是:Innodb;
1.3 事務用來管理insert、update、delete語句;
1.4 事務必須滿足的4個條件(ACID):
1.1.1 Atomicity(原子性)
一個事務的所有操作,要麽全部成功、要麽全部失敗
1.1.2 Consistency(一致性)
在事務開始之前、事務結束之後,數據庫的完整性沒有遭到破壞
1.1.3 Isolation(隔離性)
數據庫允許多個並發事務同時對數據進行讀寫和修改,隔離性可以防止多個事務執行時由於交叉執行而產生數據的不一致;
事務的隔離級別:讀未提交read uncommitted、讀提交read committed、可重復讀repeatable read、串行化Serializable;
1.1.4 Durability(持久性)
事務處理完成後,對數據的修改是永久性的;
2、事務控制語句
begin(start transaction): 顯示開啟事務
commit(commit work): 事務提交(事務提交後對數據進行的修改稱為永久性)
rollback(rollback work): 事務回滾(撤銷之前對數據庫的所有操作)
savepoint 保存點名稱: 在事務中創建一個保存點(一個事務中可有多個savepoint)
release savepoint 保存點名稱: 刪除一個事務中的保存點(如果事務中不存在保存點,會拋出異常)
rollback to 保存點名稱: 把事務回滾到保存點
set transaction: 設置事務的隔離級別(Innodb存儲引擎支持的隔離級別:讀未提交read uncommitted、
讀提交read committed、可重復讀repeatable read、串行化Serializable)
set autocommit=0 禁止事務自動提交(關閉自動提交後,從下一條指令開始開啟新的事務,需要使用commit或rollback結束該事務)
set autocommit=0 開啟事務自動提交
3、案例
【註意】:
MySQL默認事務是自動提交的、通過begin或者set autocommit=0來禁止事務自動提交;
//每個命令後必須加分號,不然報語法錯誤
BEGIN; INSERT INTO `user`(name,age) VALUES(‘lili‘,27); INSERT INTO `user`(name,age) VALUES(‘lili‘,28); ROLLBACK;
BEGIN; INSERT INTO `user`(name,age) VALUES(‘lili‘,27); INSERT INTO `user`(name,age) VALUES(‘lili‘,28); COMMIT;
SET autocommit=0; INSERT INTO `user`(name,age) VALUES(‘lili‘,27); INSERT INTO `user`(name,age) VALUES(‘lili‘,28); COMMIT;
關系型數據庫---MySQL---事務