Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何为一列添加唯一约束,该列仅在与另一列组合时才需要唯一?_Mysql_Sql_Constraints - Fatal编程技术网

Mysql 如何为一列添加唯一约束,该列仅在与另一列组合时才需要唯一?

Mysql 如何为一列添加唯一约束,该列仅在与另一列组合时才需要唯一?,mysql,sql,constraints,Mysql,Sql,Constraints,好的,假设我想创建两个表并用外键匹配它们: Table #1 Series Col 1: Series number (unique, primary key) Col 2: Series name Col 3: Series published date Table #2 Episodes Col 1: Series number (not unique in this table, foreign key, referenced with c

好的,假设我想创建两个表并用外键匹配它们:

    Table #1 Series
    Col 1: Series number (unique, primary key)
    Col 2: Series name
    Col 3: Series published date

    Table #2 Episodes
    Col 1: Series number (not unique in this table, foreign key, referenced with col1 of series table)
    Col 2: Episode number 
    Col 3: Episode name
现在,Col2的表格集不能是唯一的,因为每个系列都有第一集、第二集等,但当与col1合并时,它确实需要是唯一的。换句话说,我希望我的约束允许:

    Row 1: Series number 1, Episode number 1; Row 2: Series number 2, Episode number 1 
    Row 1: Series number 1, Episode number 1; Row 2: Series number 1, Episode number 1
但不允许这样做:

    Row 1: Series number 1, Episode number 1; Row 2: Series number 2, Episode number 1 
    Row 1: Series number 1, Episode number 1; Row 2: Series number 1, Episode number 1
我不知道怎么做。我不能对“插曲”列设置唯一的约束,但我希望避免看到重复的插曲编号与同一系列编号匹配

当然,在提交数据的客户端使用javascript可以解决这个问题,但我认为这是一个黑客化的解决方案

CREATE UNIQUE INDEX some_name ON Episodes(col1, col2);

它被称为复合键或索引。

您可以在多个列上创建唯一索引:

alter table Episodes add unique index(Seriesnumber, Episodenumber);

这到底是怎么回事?它是否创建了另一个具有自动递增唯一数字的列?但是,这是如何作为一种约束的呢?在表创建阶段执行此操作的语法是什么?另外,当我想从这些数据中进行选择时,语法是什么?唯一索引是索引,而不是列。因此,每次修改这两列中的数据时,添加新行、更新行等,都会修改索引并检查它是否仍然唯一。那张桌子上的选择不受影响。是的,我只是大脑放屁了。对不起。因此,使用多字段唯一索引的优点是,每当我尝试在这两个字段中插入非唯一的值时,mysql都会抛出一个错误?酷,这就是我想要的。我可以问你这个问题吗:唯一索引是如何跨三个字段工作的?如果这三个字段中只有一个是唯一的,那么这三个字段都将作为唯一字段通过,对吗?如果已经使用了两个字段,则不会抛出错误,只要至少有一个字段是唯一的,所有三个字段都将通过。。我这样想对吗?它是索引中所有字段的组合,与表中相同字段的所有其他组合相比必须是唯一的。