MariaDB:在提交 "INSERT IGNORE" 时隐藏警告 "Duplicate entry"

MariaDB: Hide Warning "Duplicate entry" while commit "INSERT IGNORE"

我正在使用 MariaDB 5.5.54。

我必须使用许多“INSERT IGNORE”命令来总结我的数据。

当我提交“INSERT IGNORE”并且存在具有相同主键(或者,在某些情况下,多列的唯一键)的行时,
警告:......重复条目......” 显示。
当我的命令行程序正在执行时,上面的消息可能会显示一百万次。

如何隐藏这种类型的警告信息?谢谢。

主键必须是唯一的。如果要允许重复数据删除列的主键。

Alter table yourtable drop index `yourprimarykey`;

使用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>

如果您有 "normalizing" 百万行,并且许多行已经在 table 中,请考虑以下内容。下面的代码运行得更快(因为它是批处理的)并且通过不尝试插入已经存在的行来避免警告。它涉及 2 个查询,一个用于插入 new 行,一个用于获取 all ids.

详情为here

(注意:它包括IGNORE,但只是为了方便可能很少插入相同name 'simultaneously'的多个线程。)