传统的思路:先select判断是否存在,再选择insert或者update,这样的话步骤较多。 为了解决这种需求,mysql提供了两种常用的关键字方法:replace into 与 insert into … on duplicate key update,现在我们测试下这两种方法吧! 一、replace into 测试分析 介绍: replace into 跟 insert 功能类似,不同点在于:replace ...
ON DUPLICATE KEY UPDATE ... SELECT语句来结合插入和更新操作,并从一个查询中选择数据来更新或插入。 这种语句通常用于处理以下场景: 当数据不存在时,插入新数据。 当数据存在时,根据某个查询的结果来更新现有数据。 基本语法 sql INSERT INTO target_table (column1, column2, ...) SELECT columnA, columnB,...
二、on duplicate key update 它也是可以用于更新数据的,跟replace into有点相似,但是on duplicate key update是数据表里面存在该数据就更新,不存在则插入,;而replace into则是存在就删除,再插入,不存在则插入 依旧使用上面现有的数据来测试: 先添加一个字段,用于等下更新多个字段之用:ALTER TABLE `relace_on` ...
cost_priceDECIMAL(38,10)NOTNULLCOMMENT'成本价(美元)',PRIMARYKEY(`id`),UNIQUEKEY `uidx_user_coin` (`uid`,`coin`) );-- 插入测试数据INSERTINTOuser_score(uid, coin, size, amount, cost_price)VALUES(1001,'AAA',1,10,10);-- 查看测试数据mysql>select*fromuser_score;+---+---+---+--...
在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主键不重复,则执行新纪录插入操作。另外,ON DUPLICATE KEY UPDATE不能写where条件。
-> ON DUPLICATE KEY UPDATE `count` = `count` + VALUES(`COUNT`); Query OK, 2 rows affected, 1 warning (0.12 sec) 再来查看数据 mysql> select * from books; +---+---+---+ | id | name | count | +---+---+---+ | 1 | windows | 6 | +---+...
ON DUPLICATE KEY UPDATE 语法的特点: 1.MySQL私有语法,非SQL92标准语法。 2.MySQL自身通过少数键的查找进行数据排重,并决定INSERT或UPDATE。 以下将 ON DUPLICATE KEY UPDATE 和 原子操作SELECT+INSERT or UPDATE 的方案进行对比分析: 优点: 1.减少网络连接开销,总体效率上也会略高。(具体高多少需要实验数据支撑)...
ON DUPLICATE KEY UPDATE 是一个强大的SQL语句,它结合了插入新记录和更新已存在记录的功能于一体。这种机制在处理唯一键约束时尤为有用,能够避免因尝试插入重复主键或唯一键值而产生的错误,并自动执行更新操作。 一、语法与功能 INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ......
业务方的目的是使用insert on duplicate key update对重复存在的记录进行更新,没有则插入最新的记录。 另外需要特别注明的是我们最近对数据库进行升级,将数据库版本从Percona的5.6.24升级到5.7.22,业务在老版并没有死锁出现,但是升级到5.7.22版本的RR模式之后出现死锁。
select ... 3. replace into tbl_name set col_name=value, ... // 唯一索引 ALTER TABLE 表名 ADD UNIQUE KEY `uk_唯一索引名` (`字段名`,`字段名`...); ALTER TABLE user ADD UNIQUE KEY `uk_user_id_type` (`user_id`,`type`); 1.1、主键自增 alter table t_user change id ...