更新失败时运行mysql insert

r7xajy2e  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(366)

更新行的最快方法是什么?如果参数不存在,请插入它。
我的表有两列ID quote_id, order_id 这些列的组合将形成一个独特的列。我不希望两行包含相同的内容 quote_id 以及 order_id 但两者都可以有多行。

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

以前我会添加第三个字段,并将这两个字段与 - 所以我可以用 ON DUPLICATE KEY UPDATE . 但这并不是很有效,因为有时我似乎忘记添加这些字段。
我的想法是尝试运行update查询,如果它失败了,就插入它,因为我运行了更多的update查询,然后插入。如何将其放入单个查询中,而不是让mysql服务器返回错误,然后重新运行insert查询。 if ( UPDATE table_name SET column1=value, column2=value2 WHERE some_column=some_value === ERROR ) THEN INSERT INTO table_name .... 我浏览了一些mysql文档,但找不到一个示例来说明如何在数据库中检测错误 IF 陈述

xytpbqjk

xytpbqjk1#

应该对唯一标识行的列具有主约束或唯一约束。对此使用多列是正常的,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)
);

然后,您可以依赖unique约束来导致插入失败,并运行更新:

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部分中尝试使用的相应列使用相同的值。”

相关问题