根据我的理解,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)
答案 0 :(得分:8)
正如INSERT
Syntax所述:
如果没有
IGNORE
,那么复制表中现有UNIQUE
索引或PRIMARY KEY
值的行会导致重复键错误,并且语句将被中止。使用IGNORE
时,仍未插入行,但未发出错误。
您需要在UNIQUE
上定义md5sum
索引:
ALTER TABLE rss_feeds ADD UNIQUE INDEX (md5sum);
答案 1 :(得分:0)
IGNORE将忽略任何唯一键约束产生的错误。基本上它只会忽略插入时发生的任何错误。