mysql 鎖表語句:
lock鎖整張表:
寫鎖定:
lock tables products write;
寫鎖,鎖定之後,只有當前執行緒可以進行讀操作和寫操作,其他執行緒讀操作和寫操作均被堵塞.....
讀鎖定:
lock tables products read;
讀鎖,鎖定之後,無論是當前執行緒還是其他執行緒均只能讀操作,寫操作全部被堵塞....
解鎖:
unlock tables;
行級鎖/排他鎖[使用for update]:
表需要是innodb引擎;
還需要配合事務,否則沒有效果[沒有事務的話,應該是鎖了執行完該句馬上又解鎖,看不到效果吧];
begin;//啟動事務
select
*from products where id=
1for
update;//
鎖定某一行 where條件需要主鍵
commit;//事務提交[
或者 rollback 事務回滾
]
在啟動事務然後鎖定某一行後,在事務提交之前或者事務回滾之前該行會一直處於鎖定狀態,此時只允許當前執行緒進行讀寫操作,其他執行緒只能進行讀操作,其他寫操作全部被堵塞....
mysql中只有innodb和bdb型別的資料表才能支援事務處理!其他的型別是不支援的!
補充:(2017-10-30)
gap鎖,區間鎖。
1、當表資料id只有100-200,這100條資料
事務1:
select*from u_table where id=
50for
update;
事務2:
insertinto u_table(id)values(55);#
select * from u_table where id=55 for update;//無效,測試結論來看以下結論只對insert有效
此時事務2會等待事務1操作完才能執行。(事務2,id=45也等待, 245沒有等待)
結論:當鎖行資料不存在時,並且事務1,鎖的id(50)小於當前表的區間值時。則id小於現有資料的最小id的事務都會鎖定。區間鎖定在( -∞,100)
2、資料id依然是100-200,這100條資料
直接給結論:當鎖行資料不存在時,並且事務1,鎖的id(250)大於當前表的區間值時。則id大於現有資料的最大id的事務都會鎖定。區間鎖定在( 200,+∞)
3、資料id依然是100-200,300-400,這200條資料
直接給結論:當鎖行資料不存在時,並且事務1,鎖的id(250)在當前表的某一段區間內時。則id在這段區間內的事務都會鎖定。區間鎖定在( 200,300)
ps.以前一直認為行鎖,不會影響insert,現在看來,鎖行的資料不存在時,還是要小心點,不然容易出現死鎖
mysql常用語法 MySQL常用語法
更新資料 update 表名 set 健名 更改的值 where 建 刪除資料 delete from 表名 where 索引 create index 索引名稱 on 表名 鍵名 建立試圖 create view 檢視名 鍵,鍵 as select matchno,abs won lost fro...
mysql基本常用語法 mysql 常用語法
1.1.開啟 service mysql start 1.2.關閉 service mysql stop 1.3.重啟 service mysql restart 2.1.密碼明文 語法 mysql u使用者名稱 p使用者密碼 舉例 mysql uroot p123456 2.2.密碼密文 語法 m...
python之常用語法技巧
最近看了很多同事的 遇到一些之前沒用過的python語句,積累起來吧。import uuid mac uuid.uuid1 hex 12 2 del 的使用 a b c d del a 0 則a c d del a 0 1 則a d del a 則a未定義 3 a c d a.reverse a d...