事務介紹
事務主要用於處理操作量大,復雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操作語句就構成一個事務!
事務特性
1、原子性:事務中的所有操作,要么全部完成,要么全部不完成。
2、一致性:事務提交前和提交后,數據庫的完整性沒有被破壞。
3、隔離性:事務與事務之間是相互隔離的。
4、持久性:事務一旦被提交了,那么對數據庫中的數據,改變是永久性的。
事務現象
1、臟讀:事務在處理數據的過程中,讀取到另一個未提交事務的數據。
2、不可重復讀:事務范圍內的多次查詢卻返回了不同的結果。
3、幻讀:前后多次讀取,數據總量不一致,就像產生了幻覺一樣。
隔離級別
1、serializable:事務的執行,以序列的形式執行,性能較差,安全性賊高。
2、repeatable:事務執行的過程中,多次讀取到數據是一樣的。(Mysql默認)
3、read committed:事務執行過程中,可以讀取另一個事務修改,提交后的數據。(Oracle默認)
4、read uncommitted:事務執行過程中,可以讀取到,另一個事務修改,未提交的數據。
傳播行為
1、PROPAGATION_REQUIRED:如果當前沒有事務,就創建一個新事務,如果當前存在事務,就加入該事務,該設置是最常用的。
2、PROPAGATION_SUPPORTS:支持當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就以非事務執行。
3、PROPAGATION_MANDATORY:支持當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就拋出異常。
4、PROPAGATION_REQUIRES_NEW:創建新事務,無論當前存不存在事務,都創建新事務。
5、PROPAGATION_NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
6、PROPAGATION_NEVER:以非事務方式執行,如果當前存在事務,則拋出異常。
7、PROPAGATION_NESTED:如果當前沒有事務,就創建一個新事務,如果當前存在事務,則在嵌套事務內執行。
事件介紹
事件調度器可以在指定的時刻,執行特定的任務,從而實現系統的自動化操作,而這些特定的任務就是事件,這些特定的任務通常由一些確定的SQL語句組成。事件可以使一些對數據庫,定時性的操作,不再依賴外部程序,而直接使用數據庫本身提供的功能。例如:每隔一段時間清理一些數據,或者晚上執行比較耗費CPU的查詢語句。