数据库并发、事务问题,find、insert操作会重复插入数据吗?
高洛峰
高洛峰 2016-11-05 11:34:41
0
1
588

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

$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是要原子执行吗?


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(1)
三叔

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート