最近有個需要求,需要在SqlServer中鎖定一張表後,然後搞一些事情,完成後解鎖。
如何鎖定一張表,在MySQL和PostgreSQL中都比較好處理。有專用的語法來實現,在SqlServer中並沒有對於“直接鎖定一張表的語法”,如何來處理? 變通一下也比較簡單,甚至比MySQL和postgresql都更簡單。
1,如何在MySQL中鎖定一張表
MySQL語法:lock tables t2 write;unlock tables;,解鎖之前其他session無法獲取到對應的寫鎖,unlocks table之後釋放鎖
2,如何在PostgreSQL中鎖定一張表
PostgreSQL語法如下,解鎖之前其他session無法獲取到對應的讀或者寫鎖,unlocks table之後釋放鎖
begin;
lock table t2 in access exclusive mode;
commit;
3,如何在SqlServer中鎖定一張表
SqlServer中並沒有類似於MySQL或者postgresql中直接鎖定一張表的語法,但是可以通過變通的方式來實現,通過一個簡單的select top 1查詢語句,對錶加上排他屬性的xlock,以及範圍屬性的tablock,即可鎖表。
如上表被鎖定後,被解鎖之前,其他任何session的對標的操作都會被阻塞