Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 事务中从表中删除后插入的重复条目_Mysql_Magento_Transactions - Fatal编程技术网

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中众所周知且广泛使用的一段代码,因此我不认为这是一种方法,至少对我来说是这样。请仔细阅读您链接的文档,它解释了确切的限制。只有两种方法可以避免竞争状况:锁定表或完全关闭站点。你选择;-)