[MySQL]插入操作的优化冲突方式

前言:在对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");

猜你喜欢

转载自blog.csdn.net/drdongshiye/article/details/80784451