MySQL 更新唯一约束

标签 mysql indexing key constraints unique

我有一个问题。我在 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 更新唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39291745/

相关文章:

mysql - 如何从表中选择信息?

mysql - 按日期分组并计数

mysql - 我创建了一个表,但出现了以下错误。我不知道原因

python - 给定通用维度的开始和结束索引,对 NumPy 数组进行切片

json - 如何删除除jq以外的所有键?

javascript - 如何从另一个对象中的一个对象访问多级键/值

php - $_POST 变量不适用于 $_FILES 和 multipart/form-data

json - 在 Elasticsearch 中将 Json 字段存储为字符串?

python pandas 索引 is_unique 不工作

php - 循环一个有间隙数字键的数组