【Mysql】 事務隔離
1、務的特性:原子性、一致性、隔離性、永續性
2、多事務同時執行的時候,可能會出現的問題:髒讀、不可重複讀、幻讀
3、事務隔離級別:讀未提交、讀提交、可重複讀、序列化
4、不同事務隔離級別的區別:
讀未提交:一個事務還未提交,它所做的變更就可以被別的事務看到
讀提交:一個事務提交之後,它所做的變更才可以被別的事務看到
可重複讀:一個事務執行過程中看到的資料是一致的。未提交的更改對其他事務是不可見的
序列化:對應一個記錄會加讀寫鎖,出現衝突的時候,後訪問的事務必須等前一個事務執行完成才能繼續執行
5、配置方法:啟動引數transaction-isolation
6、事務隔離的實現:每條記錄在更新的時候都會同時記錄一條回滾操作。同一條記錄在系統中可以存在多個版本,這就是資料庫的多版本併發控制(MVCC)。
7、回滾日誌什麼時候刪除?系統會判斷當沒有事務需要用到這些回滾日誌的時候,回滾日誌會被刪除。
8、什麼時候不需要了?當系統裡麼有比這個回滾日誌更早的read-view的時候。
9、為什麼儘量不要使用長事務。長事務意味著系統裡面會存在很老的事務檢視,在這個事務提交之前,回滾記錄都要保留,這會導致大量佔用儲存空間。除此之外,長事務還佔用鎖資源,可能會拖垮庫。
10、事務啟動方式:一、顯式啟動事務語句,begin或者start transaction,提交commit,回滾rollback;二、set autocommit=0,該命令會把這個執行緒的自動提交關掉。這樣只要執行一個select語句,事務就啟動,並不會自動提交,直到主動執行commit或rollback或斷開連線。
11、建議使用方法一,如果考慮多一次互動問題,可以使用commit work and chain語法。在autocommit=1的情況下用begin顯式啟動事務,如果執行commit則提交事務。如果執行commit work and chain則提交事務並自動啟動下一個事務。