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端獲取到鎖