前言:在对mysql数据库进行插入的时候经常遇见,插入时主键冲突,下面我分享两种经常使用的方式
1.ON DUPLICATE KEY UPDATE
有则更新,无则插入
step1建表
CREATE TABLE `base_person` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` tinyint(4) DEFAULT NULL,
`bz` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
step2插入3条数据
INSERT INTO base_person (id, NAME, age, sex, bz)
VALUES
(1, "王一", 12, 1, "备注"),
(2, "李二", 12, 1, "备注"),
(3, "赵四", 12, 1, "备注");
step3使用on duplicate key update操作
INSERT INTO base_person (id, NAME, age, sex, bz)
VALUES
(1, "王一1", 12, 1, "备注"),
(2, "李二1", 12, 1, "备注"),
(3, "赵四1", 12, 1, "备注")ON DUPLICATE key UPDATE id=VALUES(id)
,name=VALUES(name),age=VALUES(age),sex=VALUES(sex),bz=VALUES(bz);
注意 如果 update 后面不加任何内容会报错
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
备注:也可以在更新操作时,改变更新的值
INSERT INTO base_person (id, NAME, age, sex, bz)
VALUES
(1, "王一1", 12, 1, "备注1"),
(2, "李二1", 12, 1, "备注1"),
(3, "赵四1", 12, 1, "备注1")ON DUPLICATE key UPDATE age= 1+age ;
2.REPLACE INTO
在无冲突时,操作与insert into是一样的,但是当初出现冲突时,replace into的操作是,先去查询此数据,然后使用delete 进行删除在插入
REPLACE INTO base_person (id, NAME, age, sex, bz)
VALUES
(1, "王一1", 12, 1, "备注1"),
(2, "李二1", 12, 1, "备注1"),
(3, "赵四1", 12, 1, "备注1");