MySQL資料庫基礎知識三(事務處理)
阿新 • • 發佈:2018-12-11
事務指的是一組SQL語句,它們是一個執行單位,且在必要時還可以取消。事務處理是通過使用提交和回滾功能來實現的。
另一個用途確保某個操作所涉及的行不會在你正在使用它們時被其他客戶端修改。事務把多條語句定義為一個執行單位,防止在多客戶端環境裡可能會發生的併發問題。
事務系統通常具有“ACID”的四種特性:
原子性:構成事務的所有語句應該是一個獨立的邏輯單元,不能只執行其中的一部分。
一致性:資料庫在事務的執行前後都必須是一致的。
獨立性:事務之間不應該相互影響,這樣事務在併發執行時才會得到與挨個依次執行一樣的效果。
永續性:當事務執行成功完成時,其影響將被永久性地記錄到資料庫裡。
利用事務保證語句安全執行
- 首先需要禁用自動提交模式
- 如:
- SET autocommit = 0;//禁止自動提交模式
- SET autocommit = 1;//開啟自動提交模式
- 先呼叫START TRANSACTION(或BEGIN)語句,掛起自動提交模式
- 再執行構成本次事務的各條語句
- 最後commit語句結束事務
- 如:
- START TRANSACTION;
- INSERT INTO t SET name = 'aa';
- INSERT INTO t SET name = 'asd';
- COMMIT;
- SELECT * FROM t;
出現錯誤使用ROLLBACK回滾到本次事務的最開始。
select * from score where event_id = 5 AND student_id IN(8,9);
使用事務對其進行分數交換。
update score set score=13 where event_id =5 and student_id = 9;
事務儲存點
在事務中使用SAVEPOINT savepoint_name;
當出現錯誤回滾到該點rollback to SAVEPOINT savepoint_name;
事務隔離
事務出現的問題有:髒讀,不可重複讀,幻影行
InnoDB提供了四種事務隔離機制