gpt4 book ai didi

mysql - 更新失败时运行 MySQL Insert

转载 作者:行者123 更新时间:2023-11-29 02:11:05 25 4
gpt4 key购买 nike

更新行的最快方法是什么?如果参数不存在,则插入它。

我的表有 2 个 ID 列 quote_id, order_id,这些列组合起来会成为一个唯一的列。我不希望 2 行包含相同的 quote_idorder_id 但其中任何一个都可以有多行。

id | quote_id | order_id
1 | q200 | o100
2 | q200 | o101
3 | q201 | o100

以前我会添加第三个字段并将这 2 个字段与 - 组合,这样我就可以使用 ON DUPLICATE KEY UPDATE。但这不是很有效,因为我有时似乎忘记添加这些字段。

我的想法是尝试运行更新查询,如果失败则插入它,因为我运行了更多的更新查询然后插入。我如何将其放入单个查询而不是 MySQL 服务器必须返回错误,然后我重新运行插入查询。

如果(
UPDATE table_name SET column1=value, column2=value2 WHERE some_column=some_value === 错误
) 然后
插入 table_name ....

我查看了一些 MySQL 文档,但找不到说明如何在 IF 语句中检测到错误的示例

最佳答案

您应该对唯一标识行的列设置 PRIMARY 或 UNIQUE 约束。为此使用多个列是正常的,SQL 支持它的语法:

CREATE TABLE MyTable (
quote_id VARCHAR(4) NOT NULL,
order_id VARCHAR(4) NOT NULL,
other_data VARCHAR(4),
...
PRIMARY KEY(quote_id, order_id)
);

然后您可以依靠唯一约束来导致 INSERT 失败并改为运行 UPDATE:

INSERT INTO MyTable (quote_id, order_id, other_data) VALUES ('q200', 'o100', 'blah blah')
ON DUPLICATE KEY UPDATE
other_data = VALUES(other_data);

在 UPDATE 部分中使用 VALUES() 子句意味着“对我尝试在 INSERT 部分中使用的相应列使用相同的值。”

关于mysql - 更新失败时运行 MySQL Insert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52283031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com