【问题标题】:MySQL Half Inserted RecordsMySQL 半插入记录
【发布时间】:2011-11-25 11:18:49
【问题描述】:

我在很久以前写的一个网站上遇到了一些问题,在查看它之后,时不时地(超过 5,000 次插入有 6 次)有些插入没有完成。例如:

mysql_query("INSERT INTO `invoices` (subtotal, vat, total) VALUES ('30.00', '6.00', '36.00');", $conn);
$invoice_id = mysql_insert_id();
for($i=0; $i < 3; $i++) mysql_query("INSERT INTO `invoice_items` (item_name, invoice_id, subtotal, vat, total, tax_code) VALUES ('Bricks', '$invoice_id', '10.00', '2.00', '12.00', 'T1');", $conn);

有时for循环中的那些不会被插入,显然for循环是一个foreach,它在实际代码中循环遍历一个数组..

我猜是因为连接在中途中断..

我想确保所有内容都被插入或什么都不插入,我应该改用事务吗?

院长。

【问题讨论】:

  • 这很奇怪。 mysql日志有什么要说的?使用 mysql_query('...') 或 die(mysql_error());

标签: php mysql transactions


【解决方案1】:

尝试在查询末尾添加:or die (mysql_error()); 这样您就可以检查您遇到了什么错误。

如果您真的要进行 5000 次插入,您可以将超时设置为一个很大的数字,这样它就不会意外停止。否则,您可以让它检查是否所有内容都插入了表中,如果没有,则插入跳过的数据...

【讨论】:

    【解决方案2】:

    由于您没有在事务中执行此操作,因此您可以获得一半的插入。每个插入都可能由于许多不同的原因而失败。重复键异常、锁超时等。

    如果所有这些插入都被视为单个单元,请在其周围添加一个事务(当您获得发烧事务时,它也可能加快插入速度)

    【讨论】:

      猜你喜欢
      • 2017-11-16
      • 2012-07-12
      • 2013-12-31
      • 2012-01-02
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多