cec*_*ode 4 sql database indexing constraints
如何在两列中的两个值的组合上创建唯一约束.
含义
column1 column2
2 1
Run Code Online (Sandbox Code Playgroud)
寻找禁止的约束
column1 column2
1 2
Run Code Online (Sandbox Code Playgroud)
如果您的数据库允许索引中的表达式,您可以执行类似这样的操作(ANSI SQL):
CREATE UNIQUE INDEX on your_table (least(column1, column2)
, greatest(column1, column2));
Run Code Online (Sandbox Code Playgroud)
请注意,这是唯一的索引,而不是唯一约束.大多数DBMS的唯一区别是您不能将唯一索引作为外键的目标,但除此之外它们用于相同的目的.
如果您的DBMS没有,least()
或者greatest()
您可以使用CASE表达式替换它:
create unique index on your_table
(case column1 < column2 then column1 else column2 end,
case column2 > column1 then column2 else column1 end));
Run Code Online (Sandbox Code Playgroud)