在事务中的表DELETE之后INSERT上的重复条目

时间:2013-03-27 16:08:56

标签: mysql magento transactions

我正在寻找解释(和预防)以下内容的任何想法:

1)我们有一个不时失败的Magento reindex流程(价格或库存):

  

异常'Zend_Db_Statement_Exception',消息'SQLSTATE [23000]:   完整性约束违规:1062重复条目“512723-1-1”   关键'PRIMARY''/ [省略] /lib/Zend/Db/Statement/Pdo.php:242

完整追踪:https://gist.github.com/werdan/5255362

2)Magento reindex在事务中完成,可以如下绘制:

START TRANSACTION;
DELETE FROM `cataloginventory_stock_status`;
INSERT INTO cataloginventory_stock_status SELECT * FROM cataloginventory_stock_status_idx;
COMMIT;

3)应该不可能在DELETE和INSERT命令之间破坏表的一致性,但它会发生。

我们已检查表cataloginventory_stock_status和cataloginventory_stock_status_idx是否具有相同的键和结构。

还有什么可以作为解释和解决方案的建议?

1 个答案:

答案 0 :(得分:0)

这是许多SQL转储工具的作用:

LOCK TABLES foo WRITE;
ALTER TABLE foo DISABLE KEYS;

INSERT INTO foo (foo_id, foo_name) VALUES (1, 'One'), 
    (2, 'Two'), 
    (3, 'Three');

ALTER TABLE foo ENABLE KEYS;
UNLOCK TABLES;