1. insert into …on duplicate key update和replace into作用
表中存在重复数据(主键、唯一索引冲突)则更新,不存在则插入
2. 两者区别
-
表中存在自增值,有重复数据时,两种方法auto_increment都自动+1,但是replace into自增字段值+1,insert … on deplicate udpate自增字段值不变,用原有值。
-
当表中的某些字段中包含默认值的时候,replace操作插入不完全字段的记录,会导致其他字段直接使用默认值,而insert…on duplicate key update操作会保留该条记录的原有值
-
当与多条记录(一条以上)存在冲突时,insert…on duplicate key update操作会报字段冲突异常,replace into 则会更新成功
3. insert…on duplicate key update … 示例
-- 创建表,用于下面示例
drop table IF EXISTS TEST1;
CREATE TABLE TEST1 (
id int(11) NOT NULL AUTO_INCREMENT,
uname varchar(64) ,
cardNo varchar(128) not null,
age int(4) ,
PRIMARY KEY (id),
UNIQUE KEY u_uname (uname),
UNIQUE KEY u_cardNo (cardNo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;