【问题标题】:MySQL - Unique with exemptionMySQL - 唯一的豁免
【发布时间】:2015-01-08 01:58:43
【问题描述】:

在 mySQL 中是否有任何方法可以在具有特定列的特定值的约束的多个列上指定 UNIQUE 约束?

例子:

A B
......
1 0
1 1
1 2
2 1
3 0
3 2

在上表中,如果 B 为 0,那么它可以在表中具有相同的一组值(行)(重复),如果 B 为 1,那么它不应该接受同一组 A,B一对。 例如:在这种情况下,它应该接受任意数量的 (A,B) = (1,0), (3,0) 对,因为 B 为 0,但它不应该接受 (1,1) 的重复,( 1,2), (2,1), (3,2)。

【问题讨论】:

    标签: mysql database constraints unique


    【解决方案1】:

    如果约束中的任何列值为 NULL,MySQL 允许已经具有多列 UNIQUE 约束的重复项。也许您可以将 0 替换为 NULL。

    【讨论】:

    • 是的,这在 mySQL 中有效,因为它在唯一列中接受多个 NULL。但是,是否有任何通用逻辑适用于任何数据库?
    • @Sudheer,它是这样工作的,因为 SQL 标准规定 NULL 应该以这种方式运行。因此,其他符合 SQL 的数据库系统中的约束应该具有类似的行为。您真的在使用多个 SQL 数据库系统吗? 12 年前,我们开始了一个项目,担心数据库兼容性,并且从未切换过 MySQL。
    • Marcus,我应该给出可以在任何数据库中工作/轻松转换的通用实现。但是如果我使用这个概念,当我们需要在 Oracle 或 DB2 中使用它时,它就违反了“易于转换”。
    • 你确定它在 Oracle 和 DB2 中的实现方式不同吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2019-05-05
    • 2021-07-30
    • 2020-11-02
    • 2013-05-05
    • 1970-01-01
    相关资源
    最近更新 更多