解決 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中文網其他相關文章!