首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL创建多余的重复行

MySQL创建多余的重复行
EN

Stack Overflow用户
提问于 2013-11-22 04:59:19
回答 1查看 87关注 0票数 0

我有一个大数组的数据,我想插入到一个DB。数组的每个元素表示我DB中一行的另一个数组。对于每个元素,我创建一个ActiveRecord实例。可以有多达10K (和更多)元素,我通过cron将它们插入DB中。在每次插入之前,我的ActiveRecord运行验证并做一些选择。

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

代码语言:javascript
复制
Field1           Field2         Field3
field1Value1     field2Value1   field3Value1
field1Value2     field2Value2   field3Value2
field1Value3     field2Value3   field3Value3
field1Value4     field2Value4   field3Value4

在我的数据库中,我可以得到这样的信息:

代码语言:javascript
复制
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中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 05:48:38

如果可能的话,我总是建议在数据库级别上保持数据完整性。如果上述三列的值不应该重复,那么在数据库表中为这三列添加一个唯一的索引。如果脚本正在循环和插入数据,则在违反唯一索引时,它将失败,并将防止出现这种情况。这是我可以提供的最好的建议,而不需要看到生成插入的代码。

在表上创建唯一的索引index_name (field1、field2、field3);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20137333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档