解决 SQL Server 中的外键创建问题
在 SQL Server 中,外键声明与 PostgreSQL 中的外键声明不同。让我们检查一个查询导致错误的场景:“外键中引用列的数量与表‘question_bank’中引用列的数量不同。”
错误原因:
提供的 SQL 代码尝试创建以下表:
CREATE TABLE question_bank ( question_id UNIQUEIDENTIFIER PRIMARY KEY, question_exam_id UNIQUEIDENTIFIER NOT NULL, question_text VARCHAR(1024) NOT NULL, question_point_value DECIMAL, CONSTRAINT question_exam_id FOREIGN KEY REFERENCES exams(exam_id) );
发生错误因为“question_bank”表中的外键约束“question_exam_id”引用了“exams”表中的“exam_id”列。但是,“question_bank”表中只存在一个引用列(“question_exam_id”),而“exams”表有多个列。
解决方案:
为了解决这个问题,我们需要确保引用列的数量与被引用列的数量相匹配。在这种情况下,我们只需要将“exams”表中的“exam_name”列添加到“question_bank”表中即可:
ALTER TABLE question_bank ADD COLUMN exam_name VARCHAR(50);
现在,外键约束就可以成功创建了:
ALTER TABLE question_bank ADD CONSTRAINT question_exam_id FOREIGN KEY (question_exam_id, exam_name) REFERENCES exams(exam_id, exam_name);
替代语法:
或者,您可以在建表过程中创建约束:
CREATE TABLE question_bank ( question_id UNIQUEIDENTIFIER PRIMARY KEY, question_exam_id UNIQUEIDENTIFIER NOT NULL, exam_name VARCHAR(50), question_text VARCHAR(1024) NOT NULL, question_point_value DECIMAL, CONSTRAINT question_exam_id FOREIGN KEY (question_exam_id, exam_name) REFERENCES exams(exam_id, exam_name) );
在这种情况下,“exam_name”列将添加到“question_bank”表中,并且在建表过程中同时创建外键约束。
以上是为什么 My SQL Server 外键约束失败并出现'引用列数”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!