MySQL会创建多余的重复行

时间:2013-11-22 04:59:19

标签: php mysql innodb

我有大量数据,我想将其插入到数据库中。 数组的每个元素代表我的数据库中一行的另一个数组。 对于每个元素,我创建了一个ActiveRecord实例。 可以有多达10K(和更多)元素,我将它们cron插入到数据库中。在每次插入之前,我的ActiveRecord运行验证并生成一些SELECT。

但有时我会在数据库中得到重复。为了简化,我有下一个数据数组:

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中。

1 个答案:

答案 0 :(得分:1)

我总是建议尽可能在数据库级别维护数据完整性。如果您应该永远不会有如上所述的三列的重复值,那么为数据库表上的这三列添加唯一索引。如果脚本循环并插入数据,则在违反唯一索引时它将失败并且它将阻止这种情况。这是我可以提供的最佳建议,而无需查看插入代码。

CREATE UNIQUE INDEX index_name ON table(field1,field2,field3);