详解MYSQL中无重复插入数据更新语法

数据库 MySQL
如果不希望插入的数据是重复的,应该如何操作呢?下面将为您详细介绍MYSQL中无重复插入数据更新语法,供您参考,希望对您学习数据更新能有所帮助。

更新操作是使用数据库最常见的操作之一,下面将为您详细介绍MYSQL中无重复插入数据更新语法,供您参考,希望对您学习数据更新能有所帮助。

如果你指定了ON DUPLICATE KEY UPDATE命令语句,那么在***索引或者主索引的作用下将不插入与数据库记录重复的内容,但同时会更新数据库中的旧记录。例如,字段a被声明为***索引并且里面只包含有值为1的记录,以下两个语句会达到同样的效果:

一、INSERT INTO table (a,b,c) VALUES (1,2,3)
   ON DUPLICATE KEY UPDATE c=c+1;

二、UPDATE table SET c=c+1 WHERE a=1;

受影响的是a=1的行,当插入时c的值加1。
如果字段b也是***的话,这个插入语句将和以下语句的效果一样:
UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
如果a=1 OR b=2匹配了不止一行,也只是***行被更新。一般地,如果表中有多个***索引的话,你应该避免在使用用ON DUPLICATE KEY子句。
你可以在插入更新语句 INSERT ... UPDATE 中使用 VALUES(字段名) 函数去关联某一行记录。也就是说, VALUES(字段名) 可以用在UPDATE语句中去更新某字段的值而不会出现重复键。这个函数在多行插入中尤其有用。但是函数 VALUES() 仅当用在 INSERT ... UPDATE 语句中才有意义,否则会返回NULL。例如:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
这个语句和下面两个是同效果的:

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=3;
INSERT INTO table (a,b,c) VALUES (4,5,6)
ON DUPLICATE KEY UPDATE c=9;
如果表中包含有一个自动递增字段AUTO_INCREMENT,并用 INSERT ... UPDATE 插入一行,函数 LAST_INSERT_ID()会返回AUTO_INCREMENT的值,如果这个语句更新某一行, LAST_INSERT_ID() 就没有意义了。但是,你可以通过用 LAST_INSERT_ID(expr)使它变得有意义,假如id字段是自动递增栏的话,使 LAST_INSERT_ID() 对更新语句有意义的方法如下:

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
如果你使用 ON DUPLICATE KEY UPDATE 语句的话,延迟执行选项 DELAYED 将被忽略。

 

 

 

【编辑推荐】

SQL中两个关联表批量更新数据的方法

数据更新监控CDC介绍

SQL函数取得系统日期

sql函数遍历BOM表的方法

判断闰年的SQL函数

 

责任编辑:段燃 来源: 互联网
相关推荐

2021-04-08 10:55:53

MySQL数据库代码

2009-03-11 10:42:52

更新查询MySQL

2010-05-20 09:01:22

MySQL数据库

2010-11-24 16:53:16

MySQL无重复查询

2010-06-07 13:20:39

MySQL插入处理重复

2022-08-19 12:12:02

TypeScriptInfer 类型

2021-10-15 10:26:28

鸿蒙HarmonyOS应用

2011-08-11 14:35:47

SQL Server插入更新

2021-08-30 13:00:40

JS代码前端

2010-03-29 10:45:48

HTML 5

2020-09-18 10:18:08

MySQL数据插入数据库

2021-06-28 10:25:47

MySQL数据库重复数据

2021-09-14 13:15:43

MySQL数据库脚本

2010-11-11 10:18:59

select into

2022-09-29 10:06:56

SQLMySQL服务端

2020-08-27 07:29:01

MySQL数据数据表

2020-04-24 21:41:45

MySQL数据库插入数据

2024-01-08 09:10:35

PostgreSQL数据库管理系统

2019-09-20 10:00:33

SQLMySQL数据

2020-07-02 08:22:56

MySQL间隙锁过行锁
点赞
收藏

51CTO技术栈公众号