Rumah > pangkalan data > tutorial mysql > Mengapa Kekangan Kunci Asing Pelayan SQL Saya Gagal dengan Ralat 'Bilangan Lajur Rujukan'?

Mengapa Kekangan Kunci Asing Pelayan SQL Saya Gagal dengan Ralat 'Bilangan Lajur Rujukan'?

Mary-Kate Olsen
Lepaskan: 2025-01-04 19:32:40
asal
929 orang telah melayarinya

Why Does My SQL Server Foreign Key Constraint Fail with a

Menyelesaikan Isu Penciptaan Kunci Asing dalam SQL Server

Dalam SQL Server, pengisytiharan kunci asing berbeza daripada yang terdapat dalam PostgreSQL. Mari kita periksa senario di mana pertanyaan mengakibatkan ralat: "Bilangan lajur rujukan dalam kunci asing berbeza daripada bilangan lajur yang dirujuk, jadual 'bank_soalan'."

Punca Ralat:

Kod SQL yang disediakan cuba mencipta perkara berikut jadual:

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)
);
Salin selepas log masuk

Ralat berlaku kerana kekangan kunci asing "id_soalan_peperiksaan" dalam jadual "bank_soalan" merujuk kepada lajur "id_peperiksaan" dalam jadual "peperiksaan". Walau bagaimanapun, hanya satu lajur rujukan ("id_peperiksaan_soalan") terdapat dalam jadual "bank_soalan", manakala jadual "peperiksaan" mempunyai berbilang lajur.

Penyelesaian:

Untuk menyelesaikan isu ini, kita perlu memastikan bahawa bilangan lajur rujukan sepadan dengan bilangan lajur yang dirujuk. Dalam kes ini, kita hanya perlu menambah lajur "exam_name" daripada jadual "exams" ke jadual "question_bank":

ALTER TABLE question_bank ADD COLUMN exam_name VARCHAR(50);
Salin selepas log masuk

Kini, kekangan kunci asing boleh dibuat dengan jayanya:

ALTER TABLE question_bank
ADD CONSTRAINT question_exam_id FOREIGN KEY (question_exam_id, exam_name) REFERENCES exams(exam_id, exam_name);
Salin selepas log masuk

Sintaks Alternatif:

Sebagai alternatif, anda boleh wujudkan kekangan semasa proses penciptaan jadual:

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)
);
Salin selepas log masuk

Dalam kes ini, lajur "exam_name" ditambahkan pada jadual "bank_soalan" dan kekangan kunci asing dibuat serentak semasa pembuatan jadual.

Atas ialah kandungan terperinci Mengapa Kekangan Kunci Asing Pelayan SQL Saya Gagal dengan Ralat 'Bilangan Lajur Rujukan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan