建表语句
CREATE TABLE my_table (
id INT AUTO_INCREMENT,
column1 INT,
column2 INT,
column3 INT,
data_column VARCHAR(255),
PRIMARY KEY (id),
UNIQUE (column1, column2, column3)
);
初始化语句
INSERT INTO my_table (column1, column2, column3, data_column)
VALUES (1, 2, 3, 'aaa')
ON DUPLICATE KEY UPDATE data_column=VALUES(data_column);
INSERT INTO my_table (column1, column2, column3, data_column)
VALUES (11, 12, 13, 'bbb')
ON DUPLICATE KEY UPDATE data_column=VALUES(data_column);
数据库数据
再次执行upsert
INSERT INTO my_table (column1, column2, column3, data_column)
VALUES (1, 2, 3, 'ccc')
ON DUPLICATE KEY UPDATE data_column=VALUES(data_column);
数据库数据
小结
1.upsert语句执行的时候没有位于约束冲突就插入,有冲突就更新。唯一约束可以是主键也可以是唯一索引,只要有一个冲突就算冲突。
2.如果是要更新多个字段需要把字段一个个列举出来,如下
INSERT INTO my_table (column1, column2, column3, data_column)
VALUES (11, 12, 13, 'bbb')
ON DUPLICATE KEY UPDATE data_column=VALUES(data_column),data_column2=VALUES(data_column2),data_column3=VALUES(data_column3);