事務的四大特性(ACID)
1、原子性(Atomicity)
事務是一個不可分割的單位,事務中的所有SQL等操作要么都發生,要么都不發生。
2、一致性(Consistency)
事務發生前和發生后,數據的完整性必須保持一致。
3、隔離性(Isolation)
當並發訪問數據庫時,一個正在執行的事務在執行完畢前,對應其他的會話是不可見的,多個並發事務之間的數據是相互隔離的。備份的參數 --single-transaction
4、持久性(Durability)
一個事務一旦被提交,它對數據庫中的數據改變就是永久性的。如果出了錯誤,事務也不允許撤銷,只能通過“補償性事務”
事務的開啟:
數據庫默認事務是自動提交的,也就是發一條SQL它就執行一條。如果想多條SQL放在一個事務中執行,則續愛使用事務進行處理。當我們開啟一個事務,並且沒有提交,mysql會自動回滾事務。或者我們使用rollback命令手動回滾事務。
數據庫開啟事務命令:
MySQL默認是自動提交的,也就是你提交一個QUERY,它就直接執行!我們可以提供
mysql> show variables like "%autocommit%"; ##查看MySQL事務狀態
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
set global autocommit=OFF 禁止自動提交事務
mysql> set autocommit=0; ##關閉自動提交事務
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%autocommit%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.00 sec)
mysql> set autocommit=1; ##設置開啟自動提交事務
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%autocommit%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
set autocommit=1 ##開啟自動提交,0關閉
rollback ##回滾事務
commit ##提交事務
提示:事務引擎基於表的,所以要在表上插入、更新測試事務的特性。
innodb_flush_log_at-trx_commit = 1 ##
