对2列组合的sql唯一约束

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)

a_h*_*ame 6

如果您的数据库允许索引中的表达式,您可以执行类似这样的操作(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)