鎖一個表的某一行?

10年積累的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有昌都免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
SET?TRANSACTION?ISOLATION?LEVEL?READ?UNCOMMITTED?
SELECT?*?FROM?table?ROWLOCK?WHERE?id?=?1
實例:
--排它鎖?
--新建兩個連接?
--在第一個連接中執(zhí)行以下語句?
begin?tran?
update?table1?
set?A='aa'?
where?B='b2'?
waitfor?delay?'00:00:30'?--等待30秒?
commit?tran?
--在第二個連接中執(zhí)行以下語句?
begin?tran?
select?*?from?table1?
where?B='b2'?
commit?tran?
--若同時執(zhí)行上述兩個語句,則select查詢必須等待update執(zhí)行完畢才能執(zhí)行即要等待30秒
有排他鎖,但是排他鎖生存時間非常的短,
1. 當(dāng)開始更新時首先在表上放一個架構(gòu)鎖,防止其他事務(wù)修改架構(gòu);
2. 在非序列化隔離級別下,整個表上會放一個意向共享鎖,允許其他事務(wù)進(jìn)行讀取;
3. 然后事務(wù)開始更新這個表,更新是會逐行更新的,你可以把更新理解為一個游標(biāo);
4. 每一行上首先放上一個更新鎖,成功放置更新鎖以后,更新鎖會變?yōu)榕潘i;
5. 然后更新這一行數(shù)據(jù),更新完畢后就會釋放這一行的排它鎖;
6. 整個表遍歷完畢后釋放架構(gòu)鎖,釋放意向共享鎖。
:您好!鎖是數(shù)據(jù)庫中的一個非常重要的概念,它主要用于多用戶環(huán)境下保證數(shù)據(jù)庫完整性和一致性。 我們知道,多個用戶能夠同時操縱同一個數(shù)據(jù)庫中的數(shù)據(jù),會發(fā)生數(shù)據(jù)不一致現(xiàn)象。即如果沒有鎖定且多個用戶同時訪問一個數(shù)據(jù)庫
這是一個典型的“丟失更新”問題。通常的解決方式是提高隔離級別,或者為select加排他鎖。但我推薦下面這種方式,可以在sql server默認(rèn)的隔離級別和鎖機(jī)制下解決問題。
begin?tran
--注意:事務(wù)中的第一句必須是update
update?表名?set?id=id+1?where?...
--獲取原來的id值
declare?@id?int;
select?@id=id-1?from?表名?where?...
利用@id,進(jìn)行相應(yīng)操作
視情況commit?tran或rollback?tran
核心思路是調(diào)整語句順序,將update放到事務(wù)最開始,利用其排他鎖,阻塞其他并發(fā)事務(wù),保證同一時間只有一個事務(wù)執(zhí)行。
當(dāng)前文章:sqlserver排他,sqlserver排他鎖
文章URL:http://chinadenli.net/article25/dsgjcci.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、靜態(tài)網(wǎng)站、外貿(mào)建站、小程序開發(fā)、用戶體驗、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)