0

我正在开发一个应用程序,用户将从文本文件中导入几千条记录。我对表中的 3 列有唯一约束,但是当我尝试导入重复记录时,我收到此错误。

Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2013-06-01 15:25:41-2013-06-01 15:25:42-null' for key 'start_time'

看起来一旦由于违反约束而导致插入失败,CakePHP 将停止尝试插入数据。有什么方法可以让 CakePHP 忽略约束违规?

感谢您的时间。

4

2 回答 2

1

这实际上取决于您如何导入数据以及您使用的 RDBMS。

如果您在文本文件上逐行循环并在每行之后插入数据,则可以捕获异常并继续到文本文件的下一行。请记住将失败的行推送到某种错误日志中,这样您就可以找到哪些插入失败了。我看到的更大问题是抛出的异常可能会破坏您当前的事务,并且对于大量数据插入,您肯定希望将所有内容包装在单个事务中以获得最佳性能。

如果您使用的是 MySQL 和 CSV 文件,则LOAD DATA INFILE可以使用一个命令进行探索。

于 2013-08-06T20:49:46.670 回答
-1

问题是我们一次要导入数千条记录。在尝试插入之前检查一行是否存在(我相信这是 CakePHP 的独特验证的工作方式)如果我要尝试逐行保存它,那么查询量会增加一倍。我将删除列上的唯一约束并插入所有行。插入新行后,我将向这些列添加唯一约束,然后删除约束。我认为这对我来说效果很好,因为我们计划每月只导入一次新记录。

于 2013-08-06T17:47:22.020 回答