mysql 行鎖

在我們數據庫裏面,處理某些針對特定行的數據處理的時候, 例如書店裏有2本書,有3個人來借。 有一個訂單,多個人來搶。這個時候都需要用到行鎖。

舉例:

1. 創建數據庫:

CREATE TABLE `orders` (   
  `id` int(11) NOT NULL auto_increment,   
  `num` int(11) default NULL,   
  `name` varchar(10) default NULL,   
  PRIMARY KEY  (`id`),   
    KEY `abc` (`id`)   
) ENGINE=InnoDB  DEFAULT CHARSET=utf8; 

insert into orders(num) values(1),(1),(1),(1),(1);   
insert into orders(num) values(2),(2),(2),(2),(2); 

2. 行鎖例子:

begin; 
select * from orders where id=3 and num=1 for update; 
update orders set name='abc', num=0 where id=3 and num=1; 
commit;

3. 可以啓動兩個session

session1裏面輸入 

begin; 
select * from orders where id=3 and num=1 for update; 


在session2裏面輸入

begin; 
select * from orders where id=3 and num=1 for update; 

這個時候, session1裏面能執行下去,但是session2裏面會等待。

如果session1執行完畢,session2纔會執行。但是因爲session1裏面已經修改了num=0,因此session2裏面不能select到能修改的行。因此也就不能修改這一行了。 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章