基于另一列的列的约束

时间:2017-04-18 10:11:29

标签: mysql sql check-constraints

我有一张桌子"表"包含ID,Col1和Col2,Col3。 Col2可以是0或1。 我希望Col2在行中,其中Col1具有相同的值。 前

我想要这样的东西

+----+-------+------+-----------+
| ID | Col1  | Col2 |   Col3    |
+----+-------+------+-----------+
|  1 | "One" |    0 | "Yeah"    |
|  2 | "One" |    0 | "Meh"     |
|  3 | "One" |    0 | "Why Not" |
|  4 | "Two" |    1 | "Huh"!    |
+----+-------+------+-----------+

而不是

+----+-------+------+-----------+
| ID | Col1  | Col2 |   Col3    |
+----+-------+------+-----------+
|  1 | "One" |    0 | "Yeah"    |
|  2 | "One" |    0 | "Meh"     |
|  3 | "One" |    1 | "Why Not" | (Normally it must be 0 or line 1 and 2 
|  4 | "Two" |    1 | "Huh"!    | Must be "1" )
+----+-------+------+-----------+

1 个答案:

答案 0 :(得分:0)

即使MySQL支持检查约束,您也不会使用check约束来执行此操作。我认为最好的方法是使用外键约束。

您需要第二个表格,其中包含有效的col1 / col2值:

create table Col1Col2 as (
    col1 varchar(255) not null primary key,
    col2 int not null,
    unique (col1, col2)  -- this is not strictly necessary see below
);

然后你的桌子就是:

create table t as (
    id int auto_increment primary key,
    col1 varchar(255) not null,
    col2 int not null
    col3 int,
    constraint fk_t_col1_col2 foreign key (col1, col2) references col1col2(col1, col2)
);

但是,我甚至不会将col2存储在t中。而是将其从t中删除,然后在col1col2中查找值。

您的基本问题是您没有以关系格式存储数据,因为此要求表明您有另一个实体。