首頁 > 資料庫 > mysql教程 > 為什麼 My SQL Server 外鍵約束失敗並出現「引用列數」錯誤?

為什麼 My SQL Server 外鍵約束失敗並出現「引用列數」錯誤?

Mary-Kate Olsen
發布: 2025-01-04 19:32:40
原創
927 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板