当前位置: 首页 > 知识库问答 >
问题:

基于另一列的列的约束

颛孙博易
2023-03-14
+----+-------+------+-----------+
| 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个答案

东门焕
2023-03-14

即使MySQL支持check约束,您也不会使用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)
);
 类似资料:
  • 我有一个带有key_number列的数据帧df1,以及带有key_number和日期列的数据帧df2。如何将date的值分配为df1中的新列,但与键号相关联?当使用loc时,它根据顺序分配值,导致df1中错误的行(键的错误日期)。此外,数据帧具有不同的形状,因此我在df1中保留了空值。 提前感谢:)

  • 如何根据列上的0到max(int)值自动递增列。 假设,我希望增量从$0开始。我必须为此代码编辑什么? 进入

  • 问题内容: 我有以下独特的约束 我正在尝试防止两个问题处于活动状态时具有相同的问题编号(IS_ACTIVE值= 1)。 一切似乎都很好,直到我第二次不得不提一个问题。 我需要仅在IS_ACTIVE = 1时应用约束 问题答案: 您可以创建一个基于函数的唯一索引 这利用了以下事实:Oracle b树索引不存储数据,而叶块数据将完全为NULL。

  • 根据和的公共列在中使用填充列的最佳方法是什么? 得到: 编辑:我还想将列名更改为,这样预期的输出如下所示: 尝试过: 它发现了错误: 更新2: : :

  • 我有一个包含这类信息的数据帧: 我想添加第三列,如果描述上有,则该列将接收值1,以获得如下内容:

  • 我试图建立一个专栏,将根据另一个。新列应反映满足某些标准的值,并在值不符合标准的地方放置0。 例如,名为银行余额的列将有负值和正值;新列透支将为相应行提供负值,余额大于0时为0。 最终结果应该是这样的。