Mysql排它鎖演示

Mysql鎖機制分爲表鎖和行鎖mysql

Mysql鎖機制對比:sql

排他鎖又稱爲寫鎖,簡稱X鎖,顧名思義,排他鎖就是不能與其餘所並存,如一個事務獲取了一個數據行的排他鎖,其餘事務就不能再獲取該行的其餘鎖,包括共享鎖和排他鎖,可是獲取排他鎖的事務是能夠對數據就行讀取和修改。ide

 

如下是基於mysql存儲引擎InnoDB演示,由於InnoDB支持表鎖和行鎖,而且InnoDB支持事務spa

 

先建一張表:orm

CREATE TABLE `t_user` (blog

  `id` int(11) NOT NULL AUTO_INCREMENT,事務

  `username` varchar(255) DEFAULT NULL,ci

  `password` varchar(255) DEFAULT NULL,it

  `roleId` int(11) DEFAULT NULL,io

  `create_time` datetime DEFAULT NULL,

  `gender` int(11) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

 

插入數據

INSERT INTO `t_user` VALUES ('1', '4444', '123456', '1', '2018-08-07 15:50:14', '1');

INSERT INTO `t_user` VALUES ('2', 'zhsang', '123456', '1', '2018-08-07 15:50:14', '1');

INSERT INTO `t_user` VALUES ('3', wangwu, '123456', '1', '2018-08-07 15:50:14', '1');

INSERT INTO `t_user` VALUES ('4', lisi, '123456', '1', '2018-08-07 15:50:14', '1');

INSERT INTO `t_user` VALUES ('5', 'zhsang', '123456', '1', '2018-08-07 15:50:14', '1');

INSERT INTO `t_user` VALUES ('6', 'zhsang', '123456', '1', '2018-08-07 15:50:14', '1');

INSERT INTO `t_user` VALUES ('7', 'zhsang', '123456', '1', '2018-08-07 15:50:14', '1');

INSERT INTO `t_user` VALUES ('8', 'zhsang', '123456', '1', '2018-08-07 15:50:14', '1');

INSERT INTO `t_user` VALUES ('9', 'zhsang', '123456', '1', '2018-08-07 15:50:14', '1');

INSERT INTO `t_user` VALUES ('10', 'zhsang', '123456', '1', '2018-08-07 15:50:14', '1');

 

演示排它鎖

行鎖

行鎖---由於是 ENGINE=InnoDB,InnoDB支持表鎖和行鎖

如下三個窗口分別表示A端、B端、C端

A端先把這一行鎖住;id=1

B端id=1等待鎖

C端Id=2不須要等待所,再次證實此爲行鎖

A端執行COMMIT後

B端另一端id=1就獲取到鎖了

 

表鎖:

A端上鎖username='4444'

 

B端另一端username='4444'等待獲取鎖

C端另一端id=2 也在等待鎖

A端COMMIT後

B端獲取到鎖

C端獲取到鎖

相關文章
相關標籤/搜索