📜  在 MySQL 中插入重复密钥更新

📅  最后修改于: 2022-05-13 01:55:15.160000             🧑  作者: Mango

在 MySQL 中插入重复密钥更新

INSERT ON DUPLICATE KEY UPDATE 语句在 MySQL 中可用作 INSERT 语句的扩展。每当将新行插入表中时,以防该行导致 UNIQUE 索引或 PRIMARY KEY 中的重复条目,MySQL 将抛出错误。

在 INSERT 语句中定义 ON DUPLICATE KEY UPDATE 选项时,现有行将改为使用新值更新。

句法 :

INSERT INTO table (column_names)
VALUES (values)
ON DUPLICATE KEY UPDATE
  col1 = val1,  
  col2 = val2 ;

与 INSERT 语句一起,ON DUPLICATE KEY UPDATE 语句定义了列和值分配列表,以防重复。

这个怎么运作 :
该语句首先尝试向表中插入新行。当重复条目发生错误时,MySQL 将使用 ON DUPLICATE KEY UPDATE 子句中指定的值更新现有行。

例子 -
让我们创建一个名为“geek_demo”的表,如下所示。

CREATE TABLE geek_demo
(
id INT AUTO_INCREMENT PRIMARY KEY, 
name VARCHAR(100) 
);

将数据插入 geek_demo :

INSERT INTO geek_demo (name)
VALUES('Neha'), ('Nisha'), ('Sara') ;

从表中读取数据:

SELECT id, name
FROM geek_demo;

输出 :

idname
1Neha
2Nisha
3Sara

现在,一行将插入到表中。

INSERT INTO geek_demo(name) 
VALUES ('Sneha') 
ON DUPLICATE KEY UPDATE name = 'Sneha';

由于没有重复,MySQL 会在表中插入一个新行。上面语句的输出类似于下面语句的输出,如下所示。

INSERT INTO geek_demo(name)
VALUES ('Sneha');

读取数据:

SELECT id, name
FROM geek_demo; 

输出 :

idname
1Neha
2Nisha
3Sara
4Sneha

让我们在 id 列中插入具有重复值的行,如下所示。

INSERT INTO geek_demo (id, name) 
VALUES (4, 'Mona')
ON DUPLICATE KEY UPDATE name = 'Mona';

以下是输出:

2 row(s) affected

由于 geek_demo 表中已存在 id 为 4 的行,因此该语句将名称从 Sneha 更新为 Mona。
读取数据:

SELECT id, name
FROM geek_demo;

输出 :

idname
1Neha
2Nisha
3Sara
4Mona