在包含 X 和 Y 列的 table 中,是否可以设置约束以防止任何一条记录的 X == Y?
In a table with columns X and Y, is it possible to place a constraint to prevent X == Y for any one record?
例如,假设我正在为足球联赛建模。我有 teams
的 table 和 games
的 table。 游戏有两个外键,home_team_id
和away_team_id
。对于单场比赛,决不应该是 home_team_id
= away_team_id
(球队不能与自己比赛)。
我是防止坏数据进入数据库的坚持者。是否可以添加一个约束来防止这种情况发生?
请注意,我问的是一般情况,而不是特定于 SQL 的任何一种口味。
你可以这样做:
create table t (
x int,
y int,
constraint chk1 check (x <> y)
);
insert into t (x, y) values (123, 456); -- works
insert into t (x, y) values (200, 200); -- fails
请参阅 db<>fiddle 中的 运行 示例。
例如,假设我正在为足球联赛建模。我有 teams
的 table 和 games
的 table。 游戏有两个外键,home_team_id
和away_team_id
。对于单场比赛,决不应该是 home_team_id
= away_team_id
(球队不能与自己比赛)。
我是防止坏数据进入数据库的坚持者。是否可以添加一个约束来防止这种情况发生?
请注意,我问的是一般情况,而不是特定于 SQL 的任何一种口味。
你可以这样做:
create table t (
x int,
y int,
constraint chk1 check (x <> y)
);
insert into t (x, y) values (123, 456); -- works
insert into t (x, y) values (200, 200); -- fails
请参阅 db<>fiddle 中的 运行 示例。