【发布时间】: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 是学生的成绩。现在可以保存一个科目的成绩,但我想扩展它以保存每年的科目成绩。
顺便说一句,这不是最初的用途,但工作方式相同。
【问题讨论】:
-
你需要删除旧的唯一约束stackoverflow.com/questions/3487691/…
-
如何找出旧唯一约束的名称?我知道有 id SHOW INDEX FROM 但应该如何命名?
-
是否可能只是约束中第一列的名称?
-
刚刚检查,“显示索引”在表上显示唯一约束
标签: mysql indexing key constraints unique