導航:首頁 > 數據處理 > 資料庫如何加鎖

資料庫如何加鎖

發布時間:2024-04-27 06:11:27

⑴ mysql備份資料庫 怎麼鎖表

MySQL8.x 中新增了一個輕量級的備份鎖,它允許在 online 備份的時候進行 DML 操作,同時可防止快照不一致。這個鎖禁止的操作很少,它禁止的操作包括:

⑵ 如何對「行、表、資料庫」加鎖

1
如何鎖一個表的某一行

SET TRANSACTION
ISOLATION LEVEL READ UNCOMMITTED

SELECT * FROM table ROWLOCK WHERE id = 1

2 鎖定資料庫的一個表

SELECT * FROM table WITH (HOLDLOCK)

加鎖語句:
sybase:
update 表 set col1=col1 where 1=0
;
MSSQL:
select col1 from 表 (tablockx)
where
1=0
;
oracle:
LOCK TABLE 表 IN EXCLUSIVE MODE ;

加鎖後其它人不可操作,直到加鎖用戶解鎖,用commit或rollback解鎖

幾個例子幫助大家加深印象

設table1(A,B,C)
A B C
a1 b1 c1
a2 b2 c2
a3 b3 c3

1)排它鎖
新建兩個連接
在第一個連接中執行以下語句
begin tran
update table1

set
A='aa'
where B='b2'
waitfor delay
'00:00:30' --等待30秒
commit tran

在第二個連接中執行以下語句
begin tran
select * from table1

where B='b2'
commit tran

若同時執行上述兩個語句,則select查詢必須等待update執行完畢才能執行即要等待30秒

2)共享鎖
在第一個連接中執行以下語句
begin tran
select * from table1
holdlock
-holdlock人為加鎖
where B='b2'
waitfor delay
'00:00:30' --等待30秒
commit tran

在第二個連接中執行以下語句
begin tran
select A,C
from
table1
where B='b2'
update table1

set
A='aa'
where B='b2'
commit tran

若同時執行上述兩個語句,則第二個連接中的select查詢可以執行
而update必須等待第一個事務釋放共享鎖轉為排它鎖後才能執行
即要等待30秒

3)死鎖
增設table2(D,E)
D E
d1 e1
d2 e2

在第一個連接中執行以下語句
begin tran
update table1

set
A='aa'
where B='b2'
waitfor delay
'00:00:30'
update table2

set
D='d5'
where E='e1'
commit tran

在第二個連接中執行以下語句
begin tran
update table2

set
D='d5'
where E='e1'
waitfor delay
'00:00:10'
update table1

set
A='aa'
where B='b2'
commit tran

同時執行,系統會檢測出死鎖,並中止進程

補充一點:
Sql Server2000支持的表級鎖定提示

HOLDLOCK 持有共享鎖,直到整個事務完成,應該在被鎖對象不需要時立即釋放,等於SERIALIZABLE事務隔離級別

NOLOCK 語句執行時不發出共享鎖,允許臟讀 ,等於 READ
UNCOMMITTED事務隔離級別

PAGLOCK 在使用一個表鎖的地方用多個頁鎖

READPAST 讓sql
server跳過任何鎖定行,執行事務,適用於READ UNCOMMITTED事務隔離級別只跳過RID鎖,不跳過頁,區域和表鎖

ROWLOCK
強制使用行鎖

TABLOCKX 強制使用獨占表級鎖,這個鎖在事務期間阻止任何其他事務使用這個表

UPLOCK
強制在讀表時使用更新而不用共享鎖

應用程序鎖:
應用程序鎖就是客戶端代碼生成的鎖,而不是sql server本身生成的鎖

處理應用程序鎖的兩個過程

sp_getapplock 鎖定應用程序資源

sp_releaseapplock
為應用程序資源解鎖

注意: 鎖定資料庫的一個表的區別

SELECT * FROM table WITH (HOLDLOCK)
其他事務可以讀取表,但不能更新刪除

SELECT * FROM table WITH (TABLOCKX)
其他事務不能讀取表,更新和刪除

1
如何鎖一個表的某一行
/*
測試環境:windows 2K server + Mssql 2000

所有功能都進行測試過,並有相應的結果集,如果有什麼疑義在論壇跟帖

關於版權的說明:部分資料來自互聯網,如有不當請聯系版主,版主會在第一時間處理。

功能:sql遍歷文件夾下的文本文件名,當然你修改部分代碼後可以完成各種文件的列表。
*/

A
連接中執行

SET TRANSACTION
ISOLATION LEVEL REPEATABLE
READ

begin tran

select * from tablename
with
(rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B連接中如果執行

update tablename set
colname='10' where id=3
--則要等待5秒

update tablename
set
colname='10' where id <>3
--可立即執行

2
鎖定資料庫的一個表

SELECT * FROM table WITH (HOLDLOCK)

注意: 鎖定資料庫的一個表的區別

SELECT * FROM table WITH (HOLDLOCK)

其他事務可以讀取表,但不能更新刪除

SELECT * FROM table WITH (TABLOCKX)

其他事務不能讀取表,更新和刪除

⑶ mysql如何用事務和鎖 鎖住某一行數據,使得不允許兩個用戶同時讀取一行數據!!

1、在mysql資料庫中如何鎖定一行數據,保證不被其他的操作影響。

閱讀全文

與資料庫如何加鎖相關的資料

熱點內容
福建眼霜加盟代理費用多少 瀏覽:135
開直播需要怎麼在電腦後台看數據 瀏覽:222
代理記賬在國標行業屬於什麼 瀏覽:938
期末如何算產品成本 瀏覽:967
大眾刷程序有什麼好處 瀏覽:221
千牛怎麼看產品客群 瀏覽:347
小程序如何讓老賴還錢 瀏覽:531
武漢經濟技術開發區哪些超市 瀏覽:484
有plc程序怎麼寫出觸摸屏程序 瀏覽:179
7HTA63什麼程序 瀏覽:46
交易貓店鋪進貨怎麼賣 瀏覽:330
為什麼電腦運行程序突然變得很慢 瀏覽:560
市場上賣大餅的為什麼好吃又松軟 瀏覽:162
井下技術有哪些 瀏覽:150
nhf是什麼地方的產品 瀏覽:736
哪些金融app推廣代理權 瀏覽:570
水車摩托車如何交易 瀏覽:877
產品還沒生產完叫什麼 瀏覽:922
查錄取狀態顯示數據維護中是什麼意思 瀏覽:136
深圳買房在哪裡搖號小程序 瀏覽:422