我有一个大数组的数据,我想插入到一个DB。数组的每个元素表示我DB中一行的另一个数组。对于每个元素,我创建一个ActiveRecord实例。可以有多达10K (和更多)元素,我通过cron将它们插入DB中。在每次插入之前,我的ActiveRecord运行验证并做一些选择。
但有时我会在数据库中得到副本。为了简化,我有下一个数据数组:
Field1 Field2 Field3
field1Value1 field2Value1 field3Value1
field1Value2 field2Value2 field3Value2
field1Value3 field2Value3 field3Value3
field1Value4 field2Value4 field3Value4在我的数据库中,我可以得到这样的信息:
id Field1 Field2 Field3 time
1 field1Value1 field2Value1 field3Value1 2013-11-11 17:17:40
2 field1Value2 field2Value2 field3Value2 2013-11-11 17:17:40
3 field1Value4 field2Value4 field3Value4 2013-11-11 17:17:40
4 field1Value2 field2Value2 field3Value2 2013-11-11 17:17:40
5 field1Value3 field2Value3 field3Value3 2013-11-11 17:17:40在这种情况下,带有value 2的行被插入了两次。还要注意带有value 4的行,它是在带有value 2的行之后插入的。
问题是这些情况是偶然的,我在这里找不到模式。我试过使用事务处理,但它并没有解决问题。
在我的PHP代码中,我只有一个循环来创建一个新的ActiveRecord实例。一行不可能插入两次。因此,问题肯定在MySQL中。
发布于 2013-11-22 05:48:38
如果可能的话,我总是建议在数据库级别上保持数据完整性。如果上述三列的值不应该重复,那么在数据库表中为这三列添加一个唯一的索引。如果脚本正在循环和插入数据,则在违反唯一索引时,它将失败,并将防止出现这种情况。这是我可以提供的最好的建议,而不需要看到生成插入的代码。
在表上创建唯一的索引index_name (field1、field2、field3);
https://stackoverflow.com/questions/20137333
复制相似问题