mysql的行鎖問題

2021-07-06 08:30:39 字數 734 閱讀 3851

mysql的innodb引擎支援行級鎖和表級索。預設是行級鎖。關於行級鎖具體是什麼時候起作用。我們來**一下。

建立乙個測試表

create table `test` (

`id` int(11) not null auto_increment,

`name` varchar(20) not null,

primary key (`id`)

)engine=innodb default charset=latin1 ;

insert into test values (1,1,),(2,2);

客戶端1:set autocommit=0;                    

select * from  test where id=1 for update;

客戶端2:  update test set name='id2' where id=2; 提交成功

update test set name='id2' where id=1;

此時你會看到客戶端2會阻塞,等待客戶端1的提交。

客戶端1: commit;

客戶端2:執行成功。再回去查記錄,會發現改變。  此時細節在於where裡面使用的id是索引。使用行級鎖。

然後步驟同上面一樣,只是把name和id對調,然後你會發現資料庫自始至終都是使用表級鎖。

mysql 行鎖 訂票 mysql 行鎖

在電子商務裡,經常會出現庫存數量少,購買的人又特別多,大併發情況下如何確保商品數量不會被多次購買.其實很簡單,利用事務 for update就可以解決.我們都知道for update實際上是共享鎖,是可以被讀取的.但是如何在執行時,不被讀取呢.簡單來說 假設現在庫存為1,現在有a和b同時購買 先開啟...

mysql行鎖的特性 MySql的表鎖行鎖及間隙鎖

常用命令 手動新增表鎖 lock table 表名稱 read write 表名稱2 read write 檢視表上加過的鎖 show open tables 刪除表鎖 unlock tables 1.表鎖 特點 1.每次操作鎖住整張表,開銷小,加鎖快 2.不會出現死鎖 3.鎖定粒度大,發生鎖衝突的...

firebird 行級鎖問題 MySQL 鎖

資料庫系統使用鎖是為了支援對共享資源進行併發訪問,保障資料的完整性和一致性。不同儲存引擎的鎖設計是不一樣的,innodb 儲存引擎會在行級對資料上鎖,不過 innodb 儲存引擎也會在資料庫內部其他多個地方使用鎖。例如,操作快取池中的lru列表,刪除 新增 移動lru列表中的元素,為了保持一致性,必...