刚刚执行了数据库迁移,由于某些字符编码事故,一些记录没有输入,我也不知道哪些记录丢失了。我有一个完整的SQL转储前一个数据库,但以前的数据库已关闭。
我没有权利创建新表。由于系统已经在使用,因此无法清除表并再次转储。由于前一个表的转储如下所示:
INSERT INTO `surveys` (`id`, `column2`, `column3`, ...., `columnN`) VALUES
(1, 'value2', 'value3', ...., 'valueN'),
(2, 'value2b', 'value3b', ..., 'valueNb'),
.................
(x, 'value2x', 'value3x', ..., 'valueNx')
如果一行具有重复的主键(在这种情况下为id),则不会更新整个块。有没有办法添加一个检查,以便只将缺少的行添加到数据库中?
答案 0 :(得分:2)
将insert ignore into ...
关键字添加到insert语句中:
fixtures.js
如果使用IGNORE关键字,则执行时会出现错误 INSERT语句被忽略。例如,没有IGNORE,就是一行 复制表中的现有UNIQUE索引或PRIMARY KEY值 导致重复键错误,语句被中止。同 IGNORE,该行被丢弃,不会发生错误。忽略错误 而是生成警告。
另一种方法是将数据恢复到另一个表,并使用带有左连接的insert ... select ...,并在where子句中为null,以便仅将不存在的数据插入主表。
答案 1 :(得分:1)
您是否尝试过INSERT ... ON DUPLICATE KEY UPDATE?
INSERT INTO `surveys` (`id`, `column2`, `column3`, ...., `columnN`) VALUES
(1, 'value2', 'value3', ...., 'valueN'),
(2, 'value2b', 'value3b', ..., 'valueNb'),
.................
(x, 'value2x', 'value3x', ..., 'valueNx')
ON DUPLICATE KEY UPDATE `id`=`id`