使用唯一约束更新多个行

时间:2015-10-29 12:45:28

标签: mysql sql constraints

我的数据库中有两个表21, 2, '23.5R25 ETADT', 'description, with a comma' foo。多个bar有一个foo,并且包含第二列,用于控制具有相同bar的{​​{1}}的排序。用于排序的值应该是唯一的,因此表具有唯一约束:

foo

更新一个栏的bar s排序的最有效方法是什么?例如,如果我有这些数据:

CREATE TABLE bar (
  id int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
);

CREATE TABLE foo (
  id INT NOT NULL AUTO_INCREMENT,
  bar INT,
  `order` INT,
  PRIMARY KEY (id),
  FOREIGN KEY (bar) REFERENCES bar (id),
  UNIQUE KEY (bar, order)
);

想要重新排序(1,2,4,3),我现在有以下疑问:

foo

第一个查询是必要的,以防止其他更新的完整性错误。这可以改进吗?

1 个答案:

答案 0 :(得分:0)

我唯一能想到的是你应该在一个单独的表/查询中使用你的更新值,使它更通用,并且可以使用多个ID

<强> newQuery

 ID   newOrder
 3      4
 4      3

由于完整性限制,您在更新前将order更新为null。

 UPDATE foo SET `order` = NULL WHERE id IN (SELECT ID FROM newQuery);

然后使用JOIN

进行更新
UPDATE foo AS f
INNER JOIN newQuery AS n ON f.id = n.id
SET f.order = n.newOrder