準備資料:
-- 建立表並插入資料
create table if not exists `lock_test`(
`id` int unsigned auto_increment,
`name` varchar
(100
) not null
default
'' comment '名字'
, `age` int not null
default
1 comment '年齡'
, primary key ( `id` )
)engine=innodb default charset=utf8;
insert into lock_test (name,age)
values
('test-1',17
),('test-2',18
),('test-3',19
),('test-4',20
),('test-5',21
);
事務b:
// 開啟事務
begin ;
// 對整個表上s鎖
select * from lock_test lock in share mode ;
注意:如果這裡沒有顯式的使用s鎖,那麼其實是不會上鎖的,對於讀已提交和可重複讀兩種事務型別,讀資料時,讀取的都是快照,當然他們讀取快照的時間點不同。
事務a:
// 開啟事務
begin ;
// 要對某一行加x鎖,那麼就先要對錶加ix鎖,而表現在被別人加了s鎖,ix和s不相容,只能等待
update lock_test set id =
14 where id =
4;
控制鎖的粒度
日期 2009年5月3日 翻譯 張洪舉 原文 在sql server 7.0 的所有版本中,引擎可以鎖定行 頁或整個表。此外,即使通過獲取行或頁鎖的方式啟動了查詢,如果獲取了太多的鎖,sql server 也可能會將其提公升到乙個表鎖。每個鎖都需要使用記憶體,所以,當以乙個表鎖公升級替換成千上萬的細...
oracle多粒度鎖機制
1.資料庫鎖的概念 為了確保併發使用者在訪問同一資料庫物件時的正確性 即無丟失修改 可重複讀 不讀 髒 資料 資料庫中引入了鎖機制。基本的鎖型別有兩種 排它鎖 exclusive locks 記 為x 鎖 和共享鎖 share locks記為 s鎖 排它鎖 若事務t對資料d加x鎖,則其它任何事務都不...
Oracle多粒度鎖機制
基本鎖型別有兩種 排他鎖 exclusive locks 記為x鎖 共享鎖 share locks 記為s鎖。排他鎖 若事務t對資料d加x鎖,則其他事務都不能再對d加任何型別的鎖,直至t釋放d上的x鎖 一般要求在修改資料前要向該資料加排他鎖,所以排他鎖又稱為寫鎖。共享鎖 若事務t對資料d加s鎖,則其...