不考慮事務的情況,就單純普通(沒有鎖)的sql
1:如果一個查詢操作和一條寫的操作同時執行怎麼辦,mysql會自動加鎖嗎?
2:如果兩個或者多個查詢的操作同時執行怎麼辦?
3:如果兩個寫的操作同時執行怎麼辦?
3:如果一個讀,一個同時寫怎麼辦?
不考慮事務的情況。
回複內容:
不考慮事務的情況,就單純普通(沒有鎖)的sql
1:如果一個查詢操作和一條寫的操作同時執行怎麼辦,mysql會自動加鎖嗎?
2:如果兩個或者多個查詢的操作同時執行怎麼辦?
3:如果兩個寫的操作同時執行怎麼辦?
3:如果一個讀,一個同時寫怎麼辦?
不考慮事務的情況。
給自己補充回答:
1:innodb不同的select沒有任何鎖,Myisam會自動加表共用讀鎖;
2:innodb沒有鎖所以是沒有任何問題的,Myisam是表共用讀鎖,共用讀鎖相互沒有衝突,是並行的;
3:Myisam是加的表獨佔寫鎖,表級鎖,是串列的,寫鎖會相互阻塞,必須寫的sql是一條一條執行的。innodb情況就複雜一點了,innodb採用的是行鎖,當然還跟索引有關(影響加鎖),會自動加行排它鎖:
獨佔鎖定(X):允許獲得獨佔鎖定的事務更新資料,阻止其他事務取得相同資料集的共用讀鎖和排他寫鎖。
所以如果沒有行鎖衝突則相互沒有影響,否則會出現鎖阻塞。
,鎖粒度不同也可能會出現死結,即為:相互等待鎖會發生死結,當一個事物發現它要等的釋放鎖的事務同時也在等待它釋放鎖時,它就會發生死結退出,釋放鎖,讓前者得到鎖;
4:對於普通SELECT語句,InnoDB不會加任何鎖,所以讀寫同時進行沒有問題,讀為快照讀,寫為當前讀;對於Myisam看哪個進程先獲得表鎖,讀寫是串列的。
參考:http://blog.csdn.net/xifeijian/article/details/20313977
參考:http://blog.csdn.net/xifeijian/article/details/20312557
自動加鎖,update是原子操作