在 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;
输出 :
id | name |
---|---|
1 | Neha |
2 | Nisha |
3 | Sara |
现在,一行将插入到表中。
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;
输出 :
id | name |
---|---|
1 | Neha |
2 | Nisha |
3 | Sara |
4 | Sneha |
让我们在 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;
输出 :
id | name |
---|---|
1 | Neha |
2 | Nisha |
3 | Sara |
4 | Mona |