MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL DUPLICATE KEY

在重复密钥更新上进行插入是MySQL中INSERT语句的扩展。当我们在SQL语句中指定ON DUPLICATE KEY UPDATE子句时,一行将在 UNIQUE或PRIMARY KEY 索引列中导致重复的错误值,然后更新现有行
换句话说,当我们在表中插入新值,并导致UNIQUE OR PRIMARY KEY列中的行重复时,我们将收到错误消息。但是,如果我们在 SQL 语句中使用ON DUPLICATE KEY UPDATE子句,它将用新行值更新旧行,无论它具有唯一键列还是主键列。
例如,如果列col1被定义为UNIQUE并在表tab1中包含值10,我们将得到类似的结果执行以下两条语句后的效果:
mysql> INSERT INTO tab1 (col1, col2, col3) VALUES (10,20,30) ON DUPLICATE KEY UPDATE col3=col3+1;
mysql> UPDATE tab1 SET col3=col3+1 WHERE col1=1;
请确保如果插入的行与表中的多个唯一索引匹配,则ON DUPLICATE KEY语句仅更新 第一个匹配的唯一索引。因此,不建议在包含多个唯一索引的表上使用此语句。
如果表包含AUTO_INCREMENT主键列,并且ON DUPLICATE KEY语句尝试插入或更新一行,则Last_Insert_ID()函数返回其AUTO_INCREMENT值。
以下是在重复密钥更新中插入"语句的语法../mysql-tutorial"> MySQL :
INSERT INTO table (column_names)
VALUES (data)
ON DUPLICATE KEY UPDATE 
column1 = expression, column2 = expression…;
在这种语法中,我们可以看到 INSERT语句仅在ON DUPLICATE KEY UPDATE子句中添加 <每当发现重复的行时,strong> 列/值对赋值。 ON DUPLICATE KEY UPDATE子句的工作首先尝试将新值插入行中,如果发生错误,它将使用新行值更新现有行。
VALUES( )函数仅在本子句中使用,在任何其他上下文中均没有任何意义。它从INSERT部分返回列值,对多行插入特别有用。
MySQL根据给定的ON DUPLICATE KEY UPDATE语句给出 受影响行数动作:
如果将新行插入到表中,它将返回一个受影响的行。 如果将现有行更新到表中,它将返回两个受影响的行。 如果我们使用表中的当前值更新现有行,则它将返回受影响行数0。

MySQL INSERT ON DUPLICATE KEY示例

让我们借助示例了解MySQL中INSERT ON DUPLICATE KEY UPDATE子句的工作。
首先,使用以下语句创建一个名为 "学生" 的表:
CREATE TABLE Student (
  Stud_ID int AUTO_INCREMENT PRIMARY KEY,
  Name varchar(45) default NULL,
  Email varchar(45) default NULL,
  City varchar(25) default NULL
);
接下来,将数据插入表中。执行以下语句:
INSERT INTO Student(Stud_ID, Name, Email, City) 
VALUES (1,'Stephen', 'stephen@lidihuo.com', 'Texax'), 
(2, 'Joseph', 'Joseph@lidihuo.com', 'Alaska'), 
(3, 'Peter', 'Peter@lidihuo.com', 'california');
执行 SELECT 语句以验证插入操作:
SELECT * FROM Student;
我们将在表中有 3 行的地方获得以下输出:
MySQL在重复密钥更新中插入
再次,使用以下查询在表中再添加一行:
INSERT INTO Student(Stud_ID, Name, Email, City) 
VALUES (4,'John', 'john@lidihuo.com', 'New York');
上面的语句将成功添加行,因为它没有任何重复的值。
MySQL INSERT ON DUPLICATE KEY UPDATE
最后,我们将在 Stud_ID 列中添加具有重复值的行:
INSERT INTO Student(Stud_ID, Name, Email, City) 
VALUES (4, 'John', 'john@lidihuo.com', 'New York')
ON DUPLICATE KEY UPDATE City = 'California';
在成功执行上述查询后,MySQL给出以下消息:
Query OK, 2 rows affected.
在下面的内容中,我们可以看到 行id = 4 已经存在。因此,查询仅使用 加利福尼亚州更新 纽约市
MySQL在重复密钥更新上插入
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4