问题
I have a table "Table" that contains an ID, Col1 and Col2, Col3. Col2 can either be 0 or 1. I want Col2 in rows where Col1 has the same value to be the same. Ex
I want something like this
+----+-------+------+-----------+
| ID | Col1 | Col2 | Col3 |
+----+-------+------+-----------+
| 1 | "One" | 0 | "Yeah" |
| 2 | "One" | 0 | "Meh" |
| 3 | "One" | 0 | "Why Not" |
| 4 | "Two" | 1 | "Huh"! |
+----+-------+------+-----------+
And not
+----+-------+------+-----------+
| 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:
Even if MySQL supported check constraints, you wouldn't do this with check
constraints. I think the best way is using foreign key constraints.
You need a second table with the valid col1
/col2
values:
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
);
Then your table would be:
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)
);
However, I wouldn't even store col2
in t
. Instead remove it from t
and just look up the value in col1col2
.
Your basic problem is that you are not storing the data in a relational format, because this requirement suggests that you have another entity.
来源:https://stackoverflow.com/questions/43469326/constraint-on-a-column-based-on-another-column