假设你有一张这样的表:
id | name
---+---------
1 | foo
2 | bar
name
列有唯一性约束。
如何将id=2
的行设置为foo
,将id=1
的行设置为bar
?
我知道你可能只是为两者分配临时名称然后坚持所需的名字,但这似乎不是最简单的方法。
我正在使用Hibernate,所以任何特定于Hibernate的技巧都会很好。这似乎是一个影响所有RDBMS的问题。
答案 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 Server
和Oracle
中,约束被推迟,这就是您发出此查询的原因:
UPDATE mytable
SET name = CASE name WHEN 'foo' THEN 'bar' ELSE 'foo' END
WHERE name IN ('foo', 'bar')
正如评论中所建议的,您似乎在MySQL
中使用它来维护有序列表(这是我上次遇到此问题时)。
在这种情况下,您可能希望阅读我的博客中有关如何更有效地在MySQL
中执行此操作的一系列文章: