mysql sql中部分执行成功会怎样?
update from tb_test set mid = 1 where id in(1,2,3,……)
2:
insert into tb_test(id,mid) values (1,2), (2,3), (3,4), (……)
听说:写操作时会自动加排它锁,并且上面这种情况,锁行是一行一行的锁,然后最后同时释放锁,即锁一行,操作一行,直至没有条件,最后同时释放所有锁 by http://hedengcheng.com/?p=771
不开启事务,InnoDB表
问题1:假如更新/操作时部分执行失败了(由于主键或者唯一索引等原因导致更新失败),但是按照上面理解的,对写操作的分析,虽然最终sql执行失败,那是不是会有部分更新/新增操作成功了呢?
问题2:对于sql部分执行成功,会出现“部分生效”好像是有个mysql或者pdo的配置啊,上次在这里看到一个类似的问题,好像有说到,找半天找不到真是急死人了。
回复内容:
1:update from tb_test set mid = 1 where id in(1,2,3,……)
2:insert into tb_test(id,mid) values (1,2), (2,3), (3,4), (……)
听说:写操作时会自动加排它锁,并且上面这种情况,锁行是一行一行的锁,然后最后同时释放锁,即锁一行,操作一行,直至没有条件,最后同时释放所有锁 by http://hedengcheng.com/?p=771
不开启事务,InnoDB表
问题1:假如更新/操作时部分执行失败了(由于主键或者唯一索引等原因导致更新失败),但是按照上面理解的,对写操作的分析,虽然最终sql执行失败,那是不是会有部分更新/新增操作成功了呢?
问题2:对于sql部分执行成功,会出现“部分生效”好像是有个mysql或者pdo的配置啊,上次在这里看到一个类似的问题,好像有说到,找半天找不到真是急死人了。
谢邀,我找来一些之前的回答整理一下以供你的参考。
mysql INNODB update语句加锁顺序
高并发下,对一个表的操作insert update delete,update会失败是什么情况?
针对于题主的问题,可以明确告诉你不会出现部分成功的情况
单行语句也是一个事务,不会有成功一半的这种情况出现
没人知道这个问题吗?
推荐阅读