mySQL INSERT IGNORE不会“忽略”

时间:2012-09-14 17:09:33

标签: mysql

根据我的理解,INSERT IGNORE会插入一个新条目(如果它尚不存在),如果它已经存在,则忽略它。所以我一直试图这样做,但它似乎没有起作用。这是我的尝试:

insert insert ignore into rss_feeds (md5sum) values ("1234");
Query OK, 1 row affected (0.00 sec)

mysql> insert ignore into rss_feeds (md5sum) values ("1234");
Query OK, 1 row affected (0.00 sec)

mysql> insert ignore into rss_feeds (md5sum) values ("1234");
Query OK, 1 row affected (0.00 sec)

mysql> insert ignore into rss_feeds (md5sum) values ("1234");
Query OK, 1 row affected (0.00 sec)

mysql> select * from rss_feeds where md5sum="1234";
+------+--------+----------+---------+----------+--------+--------+---------+
| link | source | headline | updated | inserted | md5sum | itemid | emailed |
+------+--------+----------+---------+----------+--------+--------+---------+
| NULL | NULL   | NULL     | NULL    | NULL     | 1234   |   NULL |    NULL |
| NULL | NULL   | NULL     | NULL    | NULL     | 1234   |   NULL |    NULL |
| NULL | NULL   | NULL     | NULL    | NULL     | 1234   |   NULL |    NULL |
| NULL | NULL   | NULL     | NULL    | NULL     | 1234   |   NULL |    NULL | 
+------+--------+----------+---------+----------+--------+--------+---------+
4 rows in set (0.00 sec)

2 个答案:

答案 0 :(得分:8)

正如INSERT Syntax所述:

  

如果没有IGNORE,那么复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将被中止。使用IGNORE时,仍未插入行,但未发出错误。

您需要在UNIQUE上定义md5sum索引:

ALTER TABLE rss_feeds ADD UNIQUE INDEX (md5sum);

答案 1 :(得分:0)

IGNORE将忽略任何唯一键约束产生的错误。基本上它只会忽略插入时发生的任何错误。

相关问题