Mysql 唯一约束允许单行组合

标签 mysql unique-constraint

是否可以有一个唯一的约束,使得一个特定的列只有一次值?

例如

-----------------------    
name | price | default
-----------------------
XYZ  |  20   | TRUE
-----------------------
XYZ  |  30   | FALSE
-----------------------
XYZ  |  40   | FALSE
-----------------------
ABC  | 50    | FALSE
-----------------------

所以在上表中,对于特定的 name值(value),default value 只能为 TRUE 一次。并且将对名称和价格列有唯一的约束。

这可能吗?

最佳答案

normal这样做的方法是提取一个单独的表来保存默认价格:

CREATE TABLE price (
    name VARCHAR(255),
    price INT,
    PRIMARY KEY (name, price)
) ;

CREATE TABLE defaultPrice (
    name VARCHAR(255),
    price INT,
    PRIMARY KEY (name),
    FOREIGN KEY(name, price) REFERENCES price(name, price)
);

大多数人会建议引入代理键:
CREATE TABLE item (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    UNIQUE(name)
);

CREATE TABLE price (
    itemId INT,
    price INT,
    PRIMARY KEY (itemId, price),
    FOREIGN KEY (itemId) REFERENCES item (id)
) ;

CREATE TABLE defaultPrice (
    itemId INT,
    price INT,
    PRIMARY KEY (itemId),
    FOREIGN KEY (itemId, price) REFERENCES price (itemId, price)
);

关于Mysql 唯一约束允许单行组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38016280/

相关文章:

php - 渲染查询 x 次而不是需要一次,因为实例...帮助?

hibernate - Spring 抛出 JpaSystemException 而不是 DuplicateKeyException

mysql - 如何在 SQL 中更新以获得不同的元组/不违反唯一约束

postgresql - Postgres 条件唯一约束

mysql - 尽管 where 子句中的列上存在索引,但事件记录查找间歇性变慢

mysql - 如何在 MySQL 中使用条件进行连接

MySQL 1292 日期时间值不正确

php - 在 CodeIgniter 中获取 select 语句的空结果

php - 为什么在尝试插入英镑值(9000英镑)时未知字符会添加到mysql表中的值中

python - Django:创建一个不是主键唯一的列