mysql 并发 锁表_mysql 并发插入锁表

在MySQL中,两个并发的INSERT操作可能导致行级锁定。当Session A未提交事务时,Session B尝试插入相同数据会遇到锁等待超时。在REPEATABLE-READ隔离级别下,通常不会发生表锁,而是行锁。问题可能是由于字段选择性低导致全表锁,或者更新字段包含新插入的相同值,这在InnoDB引擎中是不允许的。解决方案包括提交事务、检查字段索引以及避免插入重复数据。
摘要由CSDN通过智能技术生成

执行过程如下

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的原因,更新的字段里有新插入的相同值,这样是不允许插入的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值