mysql duplicate key

create table test(a int,c int);

insert into test(a,c) values(1,3) on duplicate key update c=c+1;

如果INSERT多行记录(假设 a 为主键或 a 是一个 UNIQUE索引列):

insert into test(a,c) values(1,3),(1,7) on duplicate key update c=c+1;

执行后, c 的值会变为 4 (第二条与第一条重复, c 在原值上+1).

insert into test(a,c) values(1,3),(1,7) on duplicate key update c=values(c);

执行后, c 的值会变为 7 (第二条与第一条重复, c 在直接取重复的值7).

这个语法和适合用在需要 判断记录是否存在,不存在则插入存在则更新的场景

时间: 2024-10-14 18:29:28

mysql duplicate key的相关文章

mysql DUPLICATE KEY (merge) 语法

之前一直用 MS-SQL 需要合并表用merge语法的, 改换mysql后发现没有这个语法. 找了一下有个替代方案,还是挺方便的. ALTER TABLE brand ADD UNIQUE (code) ALTER TABLE brand_temp ADD UNIQUE (brand_code) INSERT INTObrand(code,name,enable,created_at) SELECT brand_code,brand_name,enables,now() FROM brand_t

MySQL: ON DUPLICATE KEY UPDATE 用法

使用该语法可在插入记录的时候先判断记录是否存在,如果不存在则插入,否则更新,很方便,无需执行两条SQL 这个语句知识mysql中,而标准sql语句中是没有的. INSERT INTO .. ON DUPLICATE KEY更新多行记录 如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE:如果不会导致唯一值列重复的问题,则插入新行.例如,如果列a被定义为UNIQUE,并

MySQL中ON DUPLICATE KEY UPDATE使用

今天做推断插入用到了MySQL中ON DUPLICATE KEY UPDATE,如今Mark下面! 假设你想做到数据库中没有数据的话插入数据.有数据的话更新数据,那么你能够选择ON DUPLICATE KEY UPDATE. ON DUPLICATE KEY UPDATE可以在UNIQUE索引或PRIMARY KEY存在的情况下对旧行运行UPDATE操作. 比如:假设列a被定义为UNIQUE,而且包括值1,则下面两个语句具有同样的效果: INSERT INTO table (a,b,c) VAL

【转】MySQL的Replace into 与Insert into on duplicate key update真正的不同之处

原文链接:http://www.jb51.net/article/47090.htm 今天听同事介绍oracle到mysql的数据migration,他用了Insert into ..... on duplicate key update ...,我当时就想怎么不用Replace呢,于是回来就仔细查了下,它们果然还是有区别的 看下面的例子吧: 1 Replace into ... 1.1 录入原始数据 mysql> use test; Database changed mysql>  mysq

深入mysql "ON DUPLICATE KEY UPDATE" 语法的分析

mysql "ON DUPLICATE KEY UPDATE" 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE:如果不会导致唯一值列重复的问题,则插入新行. 例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果: 复制代码代码如下: INSERT INTO TABLE (a,c) VALUES

mysql的replace into和on duplicate key update测试笔记

mysql> create table tbl_insert_tmp(id int(5),addr_number int(10), name varchar(20),primary key (id),unique key udx_addr_number (addr_number));       Query OK, 0 rows affected (0.05 sec) mysql> show create table tbl_insert_tmp\G**********************

关于MySQL:ERROR 1022 (23000): Can't write; duplicate key in table 'test4'

ERROR 1022 (23000): Can't write; duplicate key in table 'test4':在为"test4"表设置外键时.外键名与已有的外键名重复;代码如下,注意加粗部分 错误代码: mysql> create table test4( -> id int, -> cp_name varchar(32), -> constraint test_fk foreign key(cp_name) references studen

在 mysql 中利用 Duplicate key, 一句话实现存在的更新不存在插入功能

mysql 中可以用一个sql命令实现在插入时,如果发现唯一索引重复的记录则自动改为更新语句, 语句如下: INSERT INTO radcheck (username,attribute,op,VALUE) VALUES ('tyson','Cleartext-Password',':=','123') on duplicate key update value='123'; 注意,radcheck 表中 username 和 attribute 列是个组合的唯一索引. alter table

MySql避免重复插入记录方法(ignore,Replace,on duplicate key update,not exist)

在MySQL中进行条件插入数据时,可能会用到以下语句,现小结一下.我们先建一个简单的表来作为测试: CREATE TABLE `books` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(200) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `NewIndex1` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1.insert ignore int