Mysql 唯一约束允许单行组合

shangdawei 阅读:41 2024-09-07 23:24:14 评论:0

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

例如

-----------------------     
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
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号