我的表格如下:
CREATE TABLE IF NOT EXISTS PHONES (
number VARCHAR(10),
id INT,
type VARCHAR(10),
PRIMARY KEY (number),
FOREIGN KEY (id)
REFERENCES TECHNICIANS(id)
ON DELETE CASCADE
) ENGINE = INNODB;
我想为每个id指定一个主要联系号码。我想添加一个布尔列,但我无法弄清楚如何让它只允许一个“真”值。标识。
答案 0 :(得分:2)
我将一个来自TECHNICIANS的外键添加回PHONES:
ALTER TABLE TECHNICIANS
ADD COLUMN primary_number VARCHAR(10),
ADD CONSTRAINT FOREIGN KEY (primary_number) REFERENCES PHONES (number)
ON UPDATE CASCADE
ON DELETE SET NULL;
这创建了一个周期性参考:技术人员参考电话,电话参考技术人员。这没关系,但是在执行诸如删除表,恢复备份等操作时需要特殊处理。
答案 1 :(得分:1)
你基本上有3个选择......
顺便提一下,我假设你实际上是指每个Technician的一个主要数字而不是每个PhoneId
答案 2 :(得分:1)
在MySQL中使用“漏洞”。 MySQL文档says:
UNIQUE索引创建约束 这样索引中的所有值都必须 与众不同。如果你发生错误 尝试添加具有键值的新行 与现有行匹配。这个 约束不适用于NULL 除BDB存储之外的值 发动机。对于其他引擎,一个独特的 index允许多个NULL值 可以包含NULL的列。
这意味着您可以创建一个具有两个值的布尔列:true(或1)和NULL。 在该列+您的密钥上创建一个UNIQUE索引。这允许您只将一个记录设置为true,但任何数量的记录都可以为NULL。