suchen

Heim  >  Fragen und Antworten  >  Hauptteil

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

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

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


高洛峰高洛峰2950 Tage vor733

Antworte allen(2)Ich werde antworten

  •       

          2018-11-04 19:52:11

    报名成功

    Antwort
    0
  • 三叔

    三叔2016-11-04 11:24:59

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

    Antwort
    0
  • StornierenAntwort