MySQL 多次更新插入

问题描述 投票:0回答:1

我看过很多关于此的帖子,它们似乎混淆了多个列,也应该有不带引号的值,例如:

MySQL ON DUPLICATE KEY UPDATE 在单个查询中插入多行

根据我的拙见(这是错误的,因为存在错误),这是我对测试表的完整声明

insert into testDB (`UUID`,`description`,`created_at`,`updated_at`)
values ('6','test 6a',now(),now()),('7','test 7a',now(),now())
on duplicate key update
UUID = VALUES('6','7'),
description = VALUES('test 6a','test 7a'),
created_at = VALUES(now(),now()),
updated_at = VALUES(now(),now())

这是我能得到的最基本的示例,created_at和updated_at的列类型显然是datetime

[42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''6','7'), description = VALUES('test 6a','test 7a'), created_at = VALUES(now(),n' at line 1
upsert mysql-8.0
1个回答
1
投票

尝试:

INSERT INTO testDB (`UUID`, `description`, `created_at`, `updated_at`)
VALUES 
    ('6', 'test 6a', NOW(), NOW()),
    ('7', 'test 7a', NOW(), NOW())
ON DUPLICATE KEY UPDATE
    description = VALUES(description),
    created_at = VALUES(created_at),
    updated_at = NOW();

该错误语句是由于 VALUES() 函数的错误使用造成的。在 MySQL 中,VALUES() 函数在 ON DUPLICATE KEY UPDATE 子句中用于引用最初指定用于插入的值。

当您使用 ON DUPLICATE KEY UPDATE 时,VALUES() 函数指的是如果插入操作在没有遇到重复键冲突的情况下继续进行,则会为特定列插入的值。对于要在如果出现重复键,您可以使用 VALUES(column_name) 来引用建议插入该列中的值。但这也不意味着对特定列的所有引用都会自动更新;您需要明确指定要更新的每一列。

© www.soinside.com 2019 - 2024. All rights reserved.