【发布时间】:2019-04-30 17:06:35
【问题描述】:
假设我创建了下表:
CREATE TABLE `my_table` (
num1 INT PRIMARY KEY,
num2 INT,
num3 INT
) NGINE=InnoDB DEFAULT CHARSET=utf8;
假设我想在表中插入一个新行,如果新行与表中现有行之一具有相同的主键,我希望新行覆盖对应的行。
目前,以下 SQL 查询将完成这项工作:
INSERT INTO my_table (num1, num2, num3) VALUES (1, 2, 3)
ON DUPLICATE KEY UPDATE num1 = num1, num2 = num2, num3 = num3;
这个查询的问题是它很麻烦。想象一个有 20 列的表。我将不得不再次编写所有列名。
你知道任何优雅的方式来实现这一点吗?
【问题讨论】:
-
你试过
REPLACE吗? -
“这个查询的问题是它很麻烦。想象一个有 20 列的表。我将不得不重新编写所有列名。” 事实上,这就是为什么你应该规范化为像您一样递增的列名是规范化的绝佳候选者......如果这是“伪”代码,您应该提供更好的用户案例,更好地匹配您的问题和/或更好的用户案例
标签: mysql