mysql 避免重复插入
mysql
避免重复插入的方式有这样几种
“1. 使用 ignore
关键字
- 使用
replace
关键字 - 使用
on duplicate key update
使用 ignore
关键字
当表中存在主键
或者唯一索引
的时候, 避免重复插入的时候,就可以使用以下命令
1 | insert ignore into table_name set name = ?, desc = ? |
当表中已经存在数据的时候,本次 insert
会被忽略
注意:需要注意的是 insert ignore
在忽略某一次插入的时候自增id 还是会增长的,举例如下:1
2
3
4
5
6CREATE TABLE `tb1` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL COMMENT '名称',
`modify_time` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试表';
1 | mysql> insert into tb1 value(1, "name1", now()); |
使用 replace
关键字
除了 insert ignore
之外还有 replace into
这里也要求表中必须存在 主键
或者 唯一索引
1 | replace into table_name set name = 'a', desc = 'b' |
表中 name 必须存在 唯一索引
, 如果表中已经存在 name = ‘a’ 的时候, desc 的值将变更为 ‘b’
使用 on duplicate key update
当表中存在主键
或者唯一索引
的时候, 避免重复插入的时候,还可以使用以下命令
1 | insert into table_name(uniq_name, desc) values('exists_name', 'desc') on duplicate key on update count = count+1; |
上面的语句在避免重复插入的同时,还可以修改某一字段, 如果不需要修改任何字段,请使用一下语句
1 | insert into table_name(uniq_name, desc) values('exists_name', 'desc') on duplicate key on update desc = desc; |
可以说 on duplicate key update
能够实现 insert ignore
和 replace into
的功能!