首页 > 数据库 > mysql教程 > 为什么 My SQL Server 外键约束失败并出现'引用列数”错误?

为什么 My SQL Server 外键约束失败并出现'引用列数”错误?

Mary-Kate Olsen
发布: 2025-01-04 19:32:40
原创
959 人浏览过

Why Does My SQL Server Foreign Key Constraint Fail with a

解决 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板