我正在使用MariaDB 5.5.54。
我必须使用许多“ INSERT IGNORE ”命令来总结我的数据。
当我提交“ INSERT IGNORE ”并且存在具有相同主键的行(或者,在某些情况下,存在多列的唯一键)时,
“警告:......重复录入...... ”
节目。
在我的命令行程序执行时,上面的消息可能会显示数百万次。
如何隐藏此类警告消息?谢谢。
答案 0 :(得分:0)
使用 ON DUPLICATE KEY UPDATE 隐藏警告,例如:
INSERT INTO `so` (id)
VALUES
(6)
ON DUPLICATE KEY UPDATE id = VALUES(id);
<强>样品强>
mysql> INSERT INTO `so` (id)
-> VALUES
-> (6)
-> ON DUPLICATE KEY UPDATE id = VALUES(id);
Query OK, 0 rows affected (0,00 sec)
mysql> INSERT INTO `so` (id) VALUES (6);
ERROR 1062 (23000): Duplicate entry '6' for key 'PRIMARY'
mysql> INSERT IGNORE INTO `so` (id) VALUES (6);
Query OK, 0 rows affected, 1 warning (0,00 sec)
mysql> INSERT IGNORE INTO `so` (id) VALUES (6);
Query OK, 0 rows affected, 1 warning (0,00 sec)
mysql> INSERT INTO `so` (id) VALUES (6) ON DUPLICATE KEY UPDATE id = VALUES(id);
Query OK, 0 rows affected (0,01 sec)
mysql>
答案 1 :(得分:0)
如果您正在“规范化”数百万行,并且许多行已经在表中,请考虑以下内容。以下代码运行得更快(因为它批处理)并且通过不尝试插入已存在的行来避免警告。它涉及2个查询,一个用于插入新行,一个用于获取所有 ID。
详情为here。
(注意:它包含IGNORE
,但仅用于促进可能很少同时插入相同name
'的多个线程。)
答案 2 :(得分:-4)
主键必须是唯一的。如果要允许重复数据,请删除列的主键。
Alter table yourtable drop index `yourprimarykey`;