Mysql數據庫的四大特性


Mysql數據庫事務的四大特性(ACID)

事務:把一組密不可分的操作系列集合在一起,這些操作要么全部執行,要么全部不執行。

1.原子性:事務是內定義的操作是一個整體,是不可分割的。

2.一致性:同一個事務,多次讀取數據庫中的同一個數據,讀取的內容應該是一致的,不變的。

3.隔離性:不同事務之間相互獨立,互不干擾。

4.持久性:事務提交后,事務內的操作對數據庫的修改被永久保存在數據庫文件中。

 

事務的開啟

Mysql的事務默認為自動提交,每執行一條DML語句,Mysql數據庫會自動提交一次事務。

將Mysql數據庫事務提交方式修改為手動提交有兩種方式:

1)start  transaction (手動開啟一個事務,即關閉數據庫事務的自動提交,每次事務提交后,事務自動提交又會自動打開,即每次都需要手動開啟)

2)set autocommit = off;(將當前會話的事務設置為手動提交,每次事務結束都需要commit或者rollback,下個事務不需要再次手動開啟)

 

事務提交或回滾(TCL語句)事務控制語句

1)commit

2)rollback

 

事務的隔離性有四個級別

1 讀未提交    read uncommitted     一個事務可以讀到別的事務尚未提交的數據,出現的問題是讀到的數據為臟數據,稱為臟讀。

2 讀已提交    read committed    一個事務讀不到別的事務還沒提交的數據,可以讀到已經提交的事務。出現的問題是不可重復復,即同一個事務每次讀取的數據會不一致。

3 可重復讀   repeatable read     事務開啟后,同一個事務每次讀到的數據是一致的,就算別的事務提交了新的數據也是讀取不到的,這就造成了讀取的數據有可能跟數據庫的數據不相同,這種方式叫做幻讀。

4 串行化    seriaziable  一個事務的執行,需要等待上一個事務執行完成。正在執行的事務會把當前表鎖住(表級別的鎖),別的事務無法訪問當前的表。出現的問題,數據庫的執行效率低。

上面的四種隔離就別都會有一點小缺陷,那么怎么解決這種問題??

采用行級鎖,即事務只對表中的某些行進行上鎖,其他事務不能訪問上鎖的數據,但是可以修改表中的其他行。

start transcation  關閉自動提交

select * from t_user where  uid in(1000,1001)for update;當前事務對1000.1001行的記錄上鎖

注意:用主鍵作為查詢條件才會使用行級鎖,否則會采用表級別的鎖。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM