MySQL事務:
事務:一組原子性的SQL查詢,或者說一個獨立工作單元。
事務日誌:
ACID測試:
A:atomicity,原子性;整個事務中的所有操作要麼全部成功執行,要麼全部失敗後回滾;
C:consistency, 一致性;數據庫總是從一個一致性狀態轉換爲另一個一致性狀態;
I:Isolation,隔離性;一個事務所做出的操作在提交之前,是不能爲其它所見;隔離有多種隔離級別;
D:durability: 持久性;一旦事務提交,其所做的修改會永久保存於數據庫中;
事務:
啓動事務:START TRANSACTION
...
...
結束事務:
(1) COMMIT:提交
(2) ROLLBACK: 回滾
注意:只有事務型存儲引擎方能支持此類操作;
建議:顯式請求和提交事務,而不要使用“自動提交”功能;
autocommit={1|0}
事務支持savepoint
SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
事務隔離級別:
READ UNCOMMITTED (讀未提交)
READ COMMITTED (讀提交)
REPEATABLE READ (可重讀)
SERIALIZABILE (可串行化)
隔離級別過低,可能存在問題:
髒讀;
不可重複讀;
幻讀;
加鎖讀;
mysql> SHOW GLOBAL VARIABLES LIKE '%isola%'; #查看隔離級別
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
MariaDB [(none)]> SHOW VARIABLES LIKE 'tx%';
tx_isolation:服務器變量,默認爲REPEATABLE-READ;可在SESSION級進行修改;
mysql> SET tx_isolation=''; #修改隔離級別命令
mysql> SET tx_isolation='READ-UNCOMMITTED';
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE
MVCC: 多版本併發控制
自動創建一個當前事務集的快照
死鎖:
兩個或多個事務在同一資源相互佔用,並請求鎖定對方佔用的資源的狀態;
事務日誌:
事務日誌的寫入類型爲“追加”,因此其操作爲“順序IO”;此日誌通常也被稱爲“預寫式日誌(write ahead logging)”;
日誌文件大小相同,
mysql> SHOW GLOBAL VARIABLES LIKE 'innodb%'; (不支持運行修改,需要配置文件中修改,並重啓mysql服務)
innodb_log_buffer_size #日誌緩衝大小
innodb_log_file_size #日誌文件大小 (事務日誌不要過大)
innodb_log_files_in_group #同一日誌組中的文件數量
innodb_log_group_home_dir #日誌文件存放路徑
不建議使用混合引擎。