在唯一列中的行之间切换值

时间:2009-08-07 17:51:34

标签: hibernate constraints rdbms

假设你有一张这样的表:

id | name
---+---------
1  | foo
2  | bar

name列有唯一性约束。

如何将id=2的行设置为foo,将id=1的行设置为bar

我知道你可能只是为两者分配临时名称然后坚持所需的名字,但这似乎不是最简单的方法。

我正在使用Hibernate,所以任何特定于Hibernate的技巧都会很好。这似乎是一个影响所有RDBMS的问题。

2 个答案:

答案 0 :(得分:5)

在Sql Server中,您可以同时更新它们:

UPDATE table
SET Name = CASE WHEN ID = 1 THEN 'bar' ELSE 'foo' END
WHERE ID IN ( 1, 2 )

答案 1 :(得分:4)

SQL ServerOracle中,约束被推迟,这就是您发出此查询的原因:

UPDATE  mytable
SET     name = CASE name WHEN 'foo' THEN 'bar' ELSE 'foo' END
WHERE   name IN ('foo', 'bar')

正如评论中所建议的,您似乎在MySQL中使用它来维护有序列表(这是我上次遇到此问题时)。

在这种情况下,您可能希望阅读我的博客中有关如何更有效地在MySQL中执行此操作的一系列文章: