`

mysql insert into select ON DUPLICATE KEY UPDATE 更新值的问题

阅读更多

我有一句话
要达到

INSERT INTO table1 (count)
select count(b.c1) count
  from table2 b
  where date(b.date) =...
  group by b.page_hash
ON DUPLICATE KEY UPDATE count=count+b.count

 

ON DUPLICATE KEY UPDATE count=count+values(count)

等号后第一个count是表里已经存在的, values(count)是打算插入的的

 

 

今天在写一个mysql 批量更新语句时遇到一个问题
在一个统计表中,有许多统计数据,数据来源于多个数据库和表,很多数据需要使用批量更新方法,(不可能查出所有数据然后一条一条去更新吧),因此需要使用 insert into table select xx from table2这样的语句。
同时,由于需要多次更新table,table定义了一个unique key,因此如果第二次运行或者更新第二批数据的时候,会产生
Error Code : 1062
Duplicate entry ‘xx-yy’key for 'keyname' 错误
自然,我们会想到用 on duplicate key 来解除约束,这个时候就需要用到 values 取值函数
values 取值函数:VALUES(col_name ) 可以引用被插入的col_name 的 值,注意这个函数只在 insert ... update 语句中有意义
sql例子:
insert into table (a, b, c)
select a, b, c from table2
on duplicate key update c = values(c) ;
注意 values(c)中的c不需要加任何修饰
table 表 设有 a,b 联合unique key

分享到:
评论

相关推荐

    Mysql中Insert into xxx on duplicate key update问题

    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; ``` 当尝试插入的记录 `(1, 2, 3)` 中的 `a` 值已存在于表中时,`ON DUPLICATE KEY ...

    mysql ON DUPLICATE KEY UPDATE语句示例

    在MySQL数据库中,`ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在插入新数据时,如果遇到重复的唯一键值,自动执行更新操作,而不是抛出错误。这个功能大大简化了数据处理的流程,特别是当你需要在一...

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

    看下面的例子吧: 1 Replace into …1.1 录入原始数据mysql> use test;Database changedmysql> mysql> CREATE TABLE t1 SELECT 1 AS a, ‘c3’ AS b, ‘c2’ AS c;...mysql> INSERT INTO t1 SELECT 2,’

    MySQL replace into 用法.txt

    ON DUPLICATE KEY UPDATE` 语句,这可以提供更好的性能,并且在某些情况下功能更加灵活。 ### 结论 通过以上介绍可以看出,`REPLACE INTO` 是 MySQL 中一种非常有用的特性,它可以在插入新记录的同时自动处理重复...

    MySQL小技巧

    INSERT INTO table(a,b,c) VALUES(1,2,3) ON DUPLICATE KEY UPDATE c=c+1 WHERE a=1 OR b=2 LIMIT 1; ``` 此例中,如果`a=1`或`b=2`时,将`c`的值增加1,且只更新第一条符合条件的记录。 通过以上介绍可以看出...

    MySQL 高级SQL操作(数据的增、删、改、查) (2).pdf

    INSERT INTO 表名 [(字段列表)] VALUES (值列表) ON DUPLICATE KEY UPDATE 字段 = 新值[,字段=新值...]; ``` - 冲突替换:使用`REPLACE INTO`,先删除冲突记录,再插入新记录。效率相对较低,因为需要检查冲突。 ...

    mysql如果数据不存在,则插入新数据,否则更新的实现方法

    这段代码假设表 `cat_lang` 的 `cat_id` 和 `lang_id` 是联合主键,当尝试插入的记录与已有记录的主键匹配时,将执行 `ON DUPLICATE KEY UPDATE` 后面的语句,即更新 `cat_name`, `cat_desc` 和 `keywords` 字段。...

    MySQL 高级SQL操作(数据的增、删、改、查).pdf

    例如,`insert into 表名 [(字段列表)] values(值列表) on duplicate key update 字段 = 新值[,字段=新值...]`。 3. 冲突替换:使用`replace into`语句,它会先删除已存在的记录,然后插入新的记录,但效率相对较低...

    mysql insert语句操作实例讲解

    例如,`INSERT INTO table (key_column, other_column) VALUES (key_value, new_value) ON DUPLICATE KEY UPDATE other_column = new_value`。 8. **NULL值处理**: 对于定义为NOT NULL的列,INSERT语句通常不允许...

    MySql insert插入操作的3个小技巧分享

    这可以通过`ON DUPLICATE KEY UPDATE`子句实现。例如,你有一个类似的表C,想要将表C的数据插入表A,遇到重复`id`时,更新表A的`cola`列为表C的值,可以这样做: ```sql INSERT INTO A (id, cola) SELECT id, cola ...

    MySQL 高级SQL操作(数据的增、删、改、查).docx

    insert into 表名 [(字段列表)] values(值列表) on duplicate key update 字段 = 新值[,字段=新值...]; ``` 3. **冲突替换**:删除原有的记录,然后插入新的记录。但这种方式效率较低,因为它需要先检查冲突。 `...

    mysql面试题,涉及MySQL基础、MySQL索引、MySQL语句 MySQL进阶等方面,适用于初、中级开发人员

    MySQL 中没有类似 Oracle 的 merge 语句,但是可以使用两种方法来实现类似的功能:INSERT INTO … ON DUPLICATE KEY UPDATE 和 REPLACE INTO。前者使用 INSERT 语句向表中插入记录,如果发现主键或唯一键冲突,则...

    浅析MySQL replace into 的用法

    MySQL中的`REPLACE INTO`语句是一个非常实用的命令,它结合了`INSERT`和`DELETE`的...在实际应用中,根据业务需求和数据模型,可能需要结合`INSERT`、`UPDATE`和`ON DUPLICATE KEY UPDATE`等多种语句来达到最佳效果。

    MySQL中replace into语句的用法详解

    当冲突发生时,`ON DUPLICATE KEY UPDATE`允许你指定要更新哪些列以及如何更新。 综上所述,`REPLACE INTO`是MySQL中处理数据插入和更新的一种高效方式,尤其适用于需要保持数据唯一性的场景。然而,它的行为可能会...

    MYSQL插入处理重复键值的几种方法

    MySQL提供了两种主要的方法来优雅地处理这种情况:`REPLACE INTO` 和 `INSERT INTO ON DUPLICATE KEY UPDATE`。下面将详细讨论这两种方法。 1. **`REPLACE INTO` 方法** `REPLACE INTO` 命令的工作原理是首先尝试...

    mysql不同数据库不同数据表导入数据

    总结一下,`INSERT INTO`适用于新数据插入,`REPLACE INTO`适用于完全替换已有数据,`INSERT IGNORE INTO`避免覆盖数据,而`ON DUPLICATE KEY UPDATE`则允许在冲突时更新已有记录。在跨服务器的数据迁移时,需要额外...

    mysql 记录不存在时插入 记录存在则更新的实现方法

    在MySQL中,有时候我们需要在确保记录不存在的情况下插入新数据,如果记录已经存在,则需要更新已有数据...使用`ON DUPLICATE KEY UPDATE`时,确保正确设置了唯一索引或主键,以便MySQL能正确识别冲突并执行更新操作。

Global site tag (gtag.js) - Google Analytics