建表
CREATE TABLE testdemo ( `id` int(255) NOT NULL , `c1` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , `c2` int(50) NULL DEFAULT NULL , PRIMARY KEY (`id`), INDEX `idx_c2` (`c2`) USING BTREE )ENGINE=InnoDB; insert into testdemo VALUES(1,'1',1),(2,'2',2);使用一个会话打开并执行一个写锁
BEGIN SELECT * FROM testdemo WHERE id = 1 FOR UPDATE使用另一个会话框,上一个写锁
BEGIN SELECT * FROM testdemo WHERE id = 1 lock in share mode这时另一个会话执行会超时。如果发生在生产环境,可能会觉得纳闷,怎么老是等待超时呢?这时可使用下面语句找到问题的原因
select * from information_schema.INNODB_LOCKS;这时发现同一张表有两个锁,一个是读锁一个是写锁 这时我们可以使用该语句找到进程号,并kill掉它就好
select * from sys.innodb_lock_waits执行下面命令即可解锁
KILL 7