MySQL INSERT … ON DUPLICATE KEY (do nothing)

MySQL INSERT … ON DUPLICATE KEY (do nothing)

MySQL INSERT … ON DUPLICATE KEY是一种MySQL SQL语句,它允许插入新行,如果行已经存在,则更新该行。此语法结构允许你更改已经存在的行,并在存在时,不执行任何操作。

阅读更多:MySQL 教程

语法

下面是MySQL INSERT … ON DUPLICATE KEY语法的基本形式:

INSERT INTO table (columns) VALUES (values)
ON DUPLICATE KEY UPDATE column1=value1, column2=value2,...;

表格是指要插入新行的表,列是指表格的列名,值是指要插入表格中的对应列的值。如果键(或多个键)与新的插入值匹配,行将被更新。更新时,你可以指定一行中每个列的新值。请注意,ON DUPLICATE KEY不会引发错误,即使相应的行已存在。

示例

考虑下面这个表结构的示例:

CREATE TABLE `my_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

在此表中,我们创建了一个id列用作主键,并将name列设置为唯一。

插入一行信息:

INSERT INTO my_table (name, age) VALUES ('Jack', 26) ON DUPLICATE KEY UPDATE age=26;

由于不存在具有’name’列值为’Jack’的行,所以它被插入到表中,因为这是第一次执行此语句。现在执行此语句再次:

INSERT INTO my_table (name, age) VALUES ('Jack', 27) ON DUPLICATE KEY UPDATE age=27;

现在,’Jack’ 的年龄已经从 ’26’ 更新到 ’27’。

让我们尝试向表中插入一行具有重复的姓名:

INSERT INTO my_table (name, age) VALUES ('Jack', 28) ON DUPLICATE KEY UPDATE age=28;

由于 ‘Jack’ 与表格中现有的 ‘Jack’ 匹配,因此它将更新现有的行,而不是插入新行。

总结

MySQL INSERT … ON DUPLICATE KEY语句提供一种快速更新已经存在的行并添加新行的方法。在表定义时,你可以将列设置为UNIQUE,以确保它们在表中是唯一的,从而最大程度地发挥此语句的优势。在多行插入时,使用此语句可以大大减少更新和插入的开销。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程