之前在介绍INSERT INTO命令时,曾经提到,该命令在执行数据插入操作时,会在数据库中对元组的主键进行检测,若没有存在,则执行插入动作,若存在,则会报错。
而INSERT IGNORE INTO命令与其不同的是,INSERT IGNORE会忽略数据库中已经存在的记录:
如果数据库没有数据,就插入新的数据;如果有数据的话就跳过这条数据。
这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
需要说明的是,INSERT INTO和INSERT IGNORE INTO只根据“主键值”或“unique索引”进行判断,只要主键值已在数据库中存在,则认为即将插入重复记录。
语句:
INSERT IGNORE INTO table_name (field1,field2) values (value1,value2);
示例:
mysql> select * from staff_3; +----------+-------+ | name | slary | +----------+-------+ | liding | 2700 | | haofugui | 3500 | | xiaoli | 3600 | +----------+-------+ 3 rows in set (0.00 sec) mysql> describe staff_3; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | name | char(20) | NO | PRI | | | | slary | int(11) | YES | | NULL | | +-------+----------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> insert into staff_3 (name,slary) values ('xiaoli',3200); ERROR 1062 (23000): Duplicate entry 'xiaoli' for key 'PRIMARY' mysql> insert ignore into staff_3 (name,slary) values ('xiaoli',3200); Query OK, 0 rows affected (0.00 sec) mysql> select * from staff_3; +----------+-------+ | name | slary | +----------+-------+ | liding | 2700 | | haofugui | 3500 | | xiaoli | 3600 | +----------+-------+ 3 rows in set (0.00 sec)