【问题标题】:MySQL update a constraint uniqueMySQL 更新约束唯一
【发布时间】:2017-01-10 12:45:07
【问题描述】:

我有一个问题。我在 MySQL 中创建了一个带有主键和两个外键的表。 两个外键 C 和 R 必须是唯一的一对。目前这可行。

但后来我决定添加第三个键 CR_New,因为有一个新的系统功能。现在 C_ID、R_ID 和 CR_New 的组合必须是唯一的。但它不起作用,即使我已经在互联网上找到了解决方案。删除外键时出现错误 1553。如果 CR_New 不同,则允许多次组合键 C_ID 和 R_ID。

CREATE TABLE CR(
CR_ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
CR_Grade TINYINT NOT NULL DEFAULT 0,
C_ID INT UNSIGNED NOT NULL,
R_ID INT UNSIGNED NOT NULL,
PRIMARY KEY(CR_ID),
FOREIGN KEY(C_ID) REFERENCES C(C_ID),
FOREIGN KEY(R_ID) REFERENCES R(R_ID),
CONSTRAINT UNIQUE(R_ID, C_ID));

ALTER TABLE CR ADD COLUMN CR_New INT;
UPDATE CR SET CR_New = 42;

ALTER TABLE CR ADD CONSTRAINT UNIQUE (C_ID, R_ID, CR_New);

ALTER TABLE CR DROP FOREIGN KEY C_ID;
ALTER TABLE CR DROP FOREIGN KEY R_ID;
ALTER TABLE CR DROP INDEX C_ID;
ALTER TABLE CR DROP INDEX R_ID;

如果你想知道我想从中获得什么用途:想象一下 C 是学生,R 是学科,CR_New 是一年,CR_Grade 是学生的成绩。现在可以保存一个科目的成绩,但我想扩展它以保存每年的科目成绩。

顺便说一句,这不是最初的用途,但工作方式相同。

【问题讨论】:

标签: mysql indexing key constraints unique


【解决方案1】:

现在我通过创建新表解决了这个问题。在用我的数据填充它们后,我将它们重命名,现在它可以工作了。对于测试数据库应该可以正常工作:-)

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 2015-12-10
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多