MySQL交换两行的列值而不违反唯一约束?

时间:2013-06-06 18:59:10

标签: mysql unique swap

How to swap values of two rows in MySQL without violating unique constraint?类似,但不完全......

我有一张这样的表:

CREATE TABLE IF NOT EXISTS `links` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order` int(11) NOT NULL,
  `text` varchar(31) NOT NULL,
  `html_text` varchar(63) NOT NULL,
  `link` varchar(127) NOT NULL,
  `html_link` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `order` (`order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

它代表网站导航区域中的链接。例如:主页的链接,联系页面的链接等。我希望能够更改这些链接的顺序,这就是我有order列的原因。此列的值是唯一的,因此我可以按order排序。

现在我想交换此有序列表中两个链接的位置,因此我想交换order的值。但与其他问题不同,我不知道order - 字段的值,我只知道要交换的两行的id值。我想只有一个查询。

任何人都可以帮助我,因为我对复杂的MySQL查询不是很有经验。

1 个答案:

答案 0 :(得分:3)

在单个查询中没有直接的逻辑。

考虑您要交换x,y

  1. 您必须使用不同的值x更新第一个z。 (这里需要一些非常独特的逻辑)。

  2. 然后将y更新为x

  3. 然后将z更新为y