在mysql中,想要批量的插入数据到数据库,会使用这样的语句
INSERT INTO mytable (title, NAME, date)
VALUES
(
'My title',
'My name',
'My date'
),
(
'Another title',
'Another name',
'Another date'
)
但是如果此时数据库在这些字段中存在唯一索引,并且此时想要插入的数据,已经存在。
上面的sql在执行后就会输出一句因为唯一索引而导致的错误,并回滚所有的插入动作。
在实际开发中,往往希望如果存在的就不要插入,不存在的可以插入,那么此语句能否进行修改,达到目的呢。
答案是肯定的。
在mysql中有一个关键字 ignore 将此关键字放在 insert into
中间,变成 INSERT ignore INTO
,那么就会实现上面所说的效果。
注意:上面的sql虽然说可以实现数据的差分插入,但是会占用一个主键值。即某一条由于数据已经存在,而没有插入进去,但是此插入动作本应占据的主键却不会因为数据没有插入而不被占用。
同样具有上面的效果的还有 replace into
REPLACE INTO test(title,uid) VALUES ('1234657','1003');
此用法和insert一样,不过当所要插入的数据如果存在的话,他会先删除已经存在的重复值,而后进行插入,但是如果不存在的话,他会直接插入和普通的inset一样。
另外在复制表的时候可以使用
replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2;
解释:向表1中插入三个字段的值,数据来源是表2查询出来的数据,至于字段名是否对应并无关系,MySQL此时只会根据列的对应关系进行插入。