Mysql 事务中从表中删除后插入的重复条目
我正在寻找任何想法来解释(并防止)以下情况:Mysql 事务中从表中删除后插入的重复条目,mysql,magento,transactions,Mysql,Magento,Transactions,我正在寻找任何想法来解释(并防止)以下情况: START TRANSACTION; DELETE FROM `cataloginventory_stock_status`; INSERT INTO cataloginventory_stock_status SELECT * FROM cataloginventory_stock_status_idx; COMMIT; 1) 我们有一个Magento重新索引过程(价格或库存),该过程不时失败,原因是: 异常“Zend_Db_Statement_
START TRANSACTION;
DELETE FROM `cataloginventory_stock_status`;
INSERT INTO cataloginventory_stock_status SELECT * FROM cataloginventory_stock_status_idx;
COMMIT;
1) 我们有一个Magento重新索引过程(价格或库存),该过程不时失败,原因是:
异常“Zend_Db_Statement_exception”,消息为“SQLSTATE[23000]:
完整性约束冲突:的1062重复条目“512723-1-1”
/[省略]/lib/Zend/Db/Statement/Pdo.php中的键“PRIMARY”:242
完整跟踪:
2) Magento重新索引是在事务中完成的,可以绘制如下:
START TRANSACTION;
DELETE FROM `cataloginventory_stock_status`;
INSERT INTO cataloginventory_stock_status SELECT * FROM cataloginventory_stock_status_idx;
COMMIT;
3) 在DELETE和INSERT命令之间,不可能破坏表的一致性,尽管如此
我们已经检查了cataloginventory\u stock\u status和cataloginventory\u stock\u status\u idx表是否具有相同的键和结构
还有什么可以建议作为解释和解决方案?这是许多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;
事务是一种能够回滚更改的工具。它们不会阻止其他进程读取或写入表。谢谢,但不幸的是,这是Magento中众所周知且广泛使用的一段代码,因此我不认为这是一种方法,至少对我来说是这样。请仔细阅读您链接的文档,它解释了确切的限制。只有两种方法可以避免竞争状况:锁定表或完全关闭站点。你选择;-)