mysql 并发插入锁表

MySql 码拜 9年前 (2015-11-15) 1098次浏览
执行过程如下
set autocommit = 0
session A :INSERT INTO bpm_pro_status VALUES (“”1″”, “”1″”, “”UserTask1″”, “”用户任务1″”, “”-1″”, “”2015-11-12 00:00:00″”, “”test1:1:10000000490026″”, “”0″”);
结果:
[SQL]INSERT INTO bpm_pro_status VALUES (“”1″”, “”1″”, “”UserTask1″”, “”用户任务1″”, “”-1″”, “”2015-11-12 00:00:00″”, “”test1:1:10000000490026″”, “”0″”);
受影响的行: 1
时间: 0.002s
session B: INSERT INTO bpm_pro_status VALUES (“”2″”, “”2″”, “”UserTask1″”, “”用户任务1″”, “”-1″”, “”2015-11-12 00:00:00″”, “”test1:1:10000000490026″”, “”0″”);
结果:
[SQL]INSERT INTO bpm_pro_status VALUES (“”1″”, “”1″”, “”UserTask1″”, “”用户任务1″”, “”-1″”, “”2015-11-12 00:00:00″”, “”test1:1:10000000490026″”, “”0″”);
[Err] 1205 – Lock wait timeout exceeded; try restarting transaction
没有COMMIT;  sessionA居然锁表了。 表引擎 InnoDB
这是什么情况呢?请高手指点。
事物隔离级别  REPEATABLE-READ
解决方案:8分
不是锁表,只是锁住了那条1的记录,原因是你第一个没有提交。没有提交,当然B插入的时候,就会锁住。
另外,你的表有主键,假如第一个commit了,那么B插入相同的数据,就会报错。
解决方案:6分
在REPEATABLE-READ级别下,应该是不会发生表锁的,innodb是行锁。除非是操作同一行。
你是什么版本?还有其他操作吗?show 下表看看
解决方案:12分
两个可能,1,f字段选择性低,没用到索引,所以锁了全表。2,next lock的原因,更新的字段里有新插入的相同值,这样是不允许插入的。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明mysql 并发插入锁表
喜欢 (0)
[1034331897@qq.com]
分享 (0)