mysql - 在mysql中批量插入和更新

标签 mysql bulkinsert on-duplicate-key

我正在尝试在我的表中进行一些批量插入,但它应该可以处理重复值。如果有重复那么它应该更新行而不是更新它。

我的表是:user(id, name, url) where id is PK

我试过这个:

INSERT INTO `user` (`id`, `name`, `url`) 
    VALUES 
    ('7656', 'Tom', 'http://user.com/7656'),
    ('1234', 'Jean', 'http://user.com/1234'), 
    ('8596', 'Pierre', 'http://user.com/8596'),         
    ('2035', 'Somon', 'http://user.com/2035'), 
    ('3685', 'Lola', 'http://user.com/3685')
    ON DUPLICATE KEY UPDATE name=VALUES(name), url=VALUES(url)

假设我要插入的所有 5 条记录都已经存在于我的表中,并且只有要更新的 url,我应该怎么做?

是否可以像这样使用批量插入来更新行?

最佳答案

INSERT INTO `table` (a, b, c) 
VALUES (?, ?, ?), 
VALUES (?, ?, ?), 
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES (b), c = VALUES(c)

您需要每次都设置 VALUES。

此外,您构建查询的方式也没有问题,但您在第一个值中有一个额外的 ' , ' ('7656', 'Tom', ' http://user.com/7656 ' , ),

关于mysql - 在mysql中批量插入和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777081/

相关文章:

java - 使用 LinkedHashMap java 创建 Trigram

php - 我们可以在 Laravel 中创建一个 "Class Level Relationship"而不是 "Object Level Relationship"吗?

java - Mysql 正在保存从 Java 应用程序输入提供的 1 天前的日期

mysql - 当默认情况下所有内容映射到所有内容时,多对多的正确设计

mysql - 请帮助: Multi-part identifier could not be bound

java - 如何使用 SQL Server JDBC 批量复制 API

entity-framework-6 - 使用 Entity Framework 从 csv 文件批量插入

java - ON DUPLICATE KEY UPDATE 的准备语句语法(参数数量错误)

python - CSV 到 SQL Server : bulk import nightmare (T-SQL and/or Pandas)

mysql - 在 MySQL 上更新无符号 INT 失败并出现低值