优艾设计网

数据库并发、事务问题,find、insert操作会重复插入数据吗??

优艾设计网 https://www.uibq.com 2023-04-17 13:31 出处:网络 作者:电脑技术
好像出现了重复插入现象。 $db->begin();$obj = table::findFirst(\"code=521\"); if( $obj)return $db->rollback(),false;$obj = new table(); $obj->code=521; $obj-优艾设计网_设计圈>create();$db-&

好像出现了重复插入现象。

$db->begin();$obj = table::findFirst("code=521"); if( $obj)return $db->rollback(),false;$obj = new table(); $obj->code=521; $obj-优艾设计网_设计圈>create();$db->commit();

结果好像表里面code为521的数据有十多条。

当时数据库很卡,估计用户点了好几十次按钮。。然后就出现了重复数据。

猜想: 这些并发过来的请求会分不在不同内核中,然后同时运行到find表发现没有code为521的数据,想写入却发现数据库很卡写不进去,然后等数据库正常了,十来个线程都判断没有521这个code然后开始各自执行各自的插入code为521的数据。

这种猜想对吗?
事务不就是要保持这两个操作 find 和insert是要原子执行吗?


fREE2joe 优艾设计网_在线设计 2022-06-20 10:45

数据库的原子性保证了在一个事务里面的操作要么全部执行成功,要么全部执行失败.事务(隔离级别不为Serialization )不能保证事务执行的串行性


人生如浮萍03优艾设计网_Photoshop交流09 2022-06-20 10:52

重复插入,我认为这属于脏读的问题。而数据库事务是需要相应的隔离级别来避免脏读的问题的,这个可以考虑使用来应对这种并发情况。数据库事务只能保证你的业务逻辑是ok的


0

精彩评论

暂无评论...
验证码 换一张
取 消