问题出现的原因:假设有两个事务A和事务B,他们两个都存在update 同一条记录,A 先修改,但是没有提交事务,B也想修改但是一直等,直到等到了超过了innodb_lock_wait_timeout所设置的时间,就会爆出此异常
模仿异常的出现:
创建一个表:
CREATE TABLE `emp` (
`id` int(4) NOT NULL,
`deptno` int(4) DEFAULT NULL,
`col3` int(4) DEFAULT NULL,
`col4` int(4) DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
并在表中随便插入几条数据。
用navicate 连接上mysql服务,并设置客户端set autocommit=0 ,用mysql-client 也连接上服务并使用相应的数据库,并设置set autocommit=0 。
在第一个客户端执行
START TRANSACTION;
update emp SET deptno=2 WHERE id=2; 此时不要commit;
在第二个客户端执行对同一条记录的修改,如
START TRANSACTION;
update emp SET deptno=2 WHERE id=2;
此时执行结果如下图: