我有一句话
要达到
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
分享到:
相关推荐
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` 是一个非常实用的特性,它允许你在插入新数据时,如果遇到重复的唯一键值,自动执行更新操作,而不是抛出错误。这个功能大大简化了数据处理的流程,特别是当你需要在一...
看下面的例子吧: 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,’
ON DUPLICATE KEY UPDATE` 语句,这可以提供更好的性能,并且在某些情况下功能更加灵活。 ### 结论 通过以上介绍可以看出,`REPLACE INTO` 是 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,且只更新第一条符合条件的记录。 通过以上介绍可以看出...
INSERT INTO 表名 [(字段列表)] VALUES (值列表) ON DUPLICATE KEY UPDATE 字段 = 新值[,字段=新值...]; ``` - 冲突替换:使用`REPLACE INTO`,先删除冲突记录,再插入新记录。效率相对较低,因为需要检查冲突。 ...
这段代码假设表 `cat_lang` 的 `cat_id` 和 `lang_id` 是联合主键,当尝试插入的记录与已有记录的主键匹配时,将执行 `ON DUPLICATE KEY UPDATE` 后面的语句,即更新 `cat_name`, `cat_desc` 和 `keywords` 字段。...
例如,`insert into 表名 [(字段列表)] values(值列表) on duplicate key update 字段 = 新值[,字段=新值...]`。 3. 冲突替换:使用`replace into`语句,它会先删除已存在的记录,然后插入新的记录,但效率相对较低...
例如,`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语句通常不允许...
这可以通过`ON DUPLICATE KEY UPDATE`子句实现。例如,你有一个类似的表C,想要将表C的数据插入表A,遇到重复`id`时,更新表A的`cola`列为表C的值,可以这样做: ```sql INSERT INTO A (id, cola) SELECT id, cola ...
insert into 表名 [(字段列表)] values(值列表) on duplicate key update 字段 = 新值[,字段=新值...]; ``` 3. **冲突替换**:删除原有的记录,然后插入新的记录。但这种方式效率较低,因为它需要先检查冲突。 `...
MySQL 中没有类似 Oracle 的 merge 语句,但是可以使用两种方法来实现类似的功能:INSERT INTO … ON DUPLICATE KEY UPDATE 和 REPLACE INTO。前者使用 INSERT 语句向表中插入记录,如果发现主键或唯一键冲突,则...
MySQL中的`REPLACE INTO`语句是一个非常实用的命令,它结合了`INSERT`和`DELETE`的...在实际应用中,根据业务需求和数据模型,可能需要结合`INSERT`、`UPDATE`和`ON DUPLICATE KEY UPDATE`等多种语句来达到最佳效果。
当冲突发生时,`ON DUPLICATE KEY UPDATE`允许你指定要更新哪些列以及如何更新。 综上所述,`REPLACE INTO`是MySQL中处理数据插入和更新的一种高效方式,尤其适用于需要保持数据唯一性的场景。然而,它的行为可能会...
MySQL提供了两种主要的方法来优雅地处理这种情况:`REPLACE INTO` 和 `INSERT INTO ON DUPLICATE KEY UPDATE`。下面将详细讨论这两种方法。 1. **`REPLACE INTO` 方法** `REPLACE INTO` 命令的工作原理是首先尝试...
总结一下,`INSERT INTO`适用于新数据插入,`REPLACE INTO`适用于完全替换已有数据,`INSERT IGNORE INTO`避免覆盖数据,而`ON DUPLICATE KEY UPDATE`则允许在冲突时更新已有记录。在跨服务器的数据迁移时,需要额外...
在MySQL中,有时候我们需要在确保记录不存在的情况下插入新数据,如果记录已经存在,则需要更新已有数据...使用`ON DUPLICATE KEY UPDATE`时,确保正确设置了唯一索引或主键,以便MySQL能正确识别冲突并执行更新操作。