MySQL事物 ACID指出每個事物型RDBMS必須遵守4個屬性,及原子性、一致性、孤立性和持久性。通過InnoDB和BDB類型表,MySQL事物能夠完全滿足事物安全的ACID測試,但不是所有類型都支持事物,如MyISAM類型表就不能支持事物,只能通過偽事物對表實現事物處理。
默認情況下InnoDB表持久性最長,MyISAM表提供部分持久。 MySQL事物的創建與存在周期 如果用戶想讓數據表支持事物處理能力,必須將當前操作數據表的類型設置為InnoDB或BDB。創建InnoDB或BDB類型的數據表,基本命令結構:
CREATE TABLE table_name(field-defintions) TYPE = INNODEB/BDB;
更改數據表類型:
ALTER TABLE table_name TYPE = INNODB/BDB;
注意:應用ALTER TABLE操作肯能會導致數據庫中數據丟失,因此為了避免非預期結果出現,在使用該命令之前,用戶需要創建一個表備份。創建事物的一般過程: 初始化事物
START TRANSACTION;創建事物
應用SELECT語句查看數據是否被正確輸入提交事物
COMMIT撤銷事物ROLLBACK1
如果執行一個回滾操作,則在START TRANSACTION命令後的所有SQL語句都將執行回滾操作。如果開啟事物後,沒有提交事物,則事物默認為自動回滾狀態,即不保存用戶之前的任何操作。事物的存在周期
事物不支持嵌套功能,當用戶第一個事物未結束又開始第二個事物時,則前一個事物會自動提交,同樣MySQL中很多命令都會隱藏執行COMMIT 命令。 MySQL行為 自動提交控制MySQL自動提交參數,可以通過AUTOCOMMIT變量更改提交模式
SET AUTOCOMMIT=0;
只有當用戶輸入COMMIT命令後,MySQL才將數據表中的資料提交到數據庫中,如果不提交事物,而終止MySQL會話,數據庫將會自動執行回滾操作。
通過 select @@autocommit; 變量來查看當前自動提交狀態事物的孤立級
SERIALIZABLE(序列化)
REPEATABLE READ (可重讀性)
READ COMMITTED (提交後讀)
READ UNCOMMITTED(未提交讀) 獲取當前事物孤立級別的命令:
SELECT @@tx_isolation;修改事物的孤立級
set global transaction isolation level 孤立級;
如果用戶要想修改事物的孤立級,必須首先獲取SUPER優先權,以便用戶可以順利執行修改操作。 事物和性能 應用小事物選擇合適的孤立級避免死鎖 MySQL偽事物 用表鎖定代替事物 為指定數據表添加鎖定
LOCK TABLES table_name lock_type,...用戶執行數據表的操作,可以添加、刪除或者更新部分數據。解鎖
UNLOCK TALBES; 應用表鎖實現偽事物