1.共享鎖:只要有一個人(事務或線程)在查詢,其他人就都不能改,要照顧少數
下面是將所有性別是男的數據都加上共享鎖
select * from table where sex='男' lock in share mode
事務的隔離級別有幾種,2.排他鎖:只要有一個人(事務或線程)在用(增刪改差),其他人就不能用
下面是將所有性別是男的數據都加上排他鎖
select * from table where sex='男' for update
3.意向鎖:個人理解說意向鎖,不如說成是個標識符,如果標識符存在,就說明該表中的一行或者多行數據正在被其他事務使用,當前事務不能對該表加鎖,如果標識符不存在,則說明表中沒有任何一條數據被其他事務使用,既然不存在,那么其他事物就可以對該表加鎖了,然后操作該表里的任意數據
數據庫鎖的級別,快照讀:單一的select * from 表 where條件
當前讀:讀的是最新的數據,讀之前都需要加鎖,增刪改和上文的加鎖都是當前讀
查看mysql的默認隔離級別執行如下語句:select @@tx_isolation
1.不可重復讀:Read Committed保證對讀取到的記錄加鎖 (記錄鎖),存在幻讀現象。
2.可重復讀:Repeatable Read保證對讀取到的記錄加鎖 (記錄鎖),同時保證對讀取的范圍加鎖,新的滿足查詢條件的記錄不能夠插入 (間隙鎖),不存在幻讀現象。
幻讀:
解釋1針對結果集.事務A對結果集查詢,顯示出2條記錄,之后事務B插入相同條件的記錄,然后事務A再次用相同條件查詢,結果顯示出3條記錄,和第一次查詢的數據不一致
解釋2.事務A在插入事先檢測不存在的記錄時,驚奇的發現這些數據已經存在了,(事務A檢測完之后事務B正好插入)之前的檢測讀獲取到的數據如同鬼影一般。
網上支持解釋2的通常都自己覺得解釋1是錯誤的,不過我個人看來兩個解釋還真沒什么區別。。。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态