Rumah >pangkalan data >tutorial mysql >Mengapa Postgres Membuang Ralat 'Tiada Kekangan Unik Padanan Kunci Diberi' Semasa Mencipta Kunci Asing?

Mengapa Postgres Membuang Ralat 'Tiada Kekangan Unik Padanan Kunci Diberi' Semasa Mencipta Kunci Asing?

Linda Hamilton
Linda Hamiltonasal
2025-01-08 22:19:53769semak imbas

Why Does Postgres Throw a

Memahami Ralat Integriti Rujukan Postgres

Apabila membina struktur pangkalan data dalam Postgres (versi 9.1 atau lebih baru), anda mungkin menghadapi ralat ini:

<code>ERROR: there is no unique constraint matching given keys for referenced table "bar"</code>

Ralat ini timbul daripada penguatkuasaan integriti rujukan Postgres, satu aspek penting dalam ketekalan pangkalan data. Jom pecahkan punca dan penyelesaiannya.

Integriti Rujukan dan Kunci Asing

Integriti rujukan memastikan ketekalan data merentas jadual yang berkaitan. Hubungan utama asing mewujudkan hubungan antara jadual. Sebagai contoh, jika jadual bar mempunyai kunci asing foo_fk merujuk kepada lajur name dalam jadual foo, integriti rujukan memberi mandat bahawa setiap nilai foo_fk dalam bar mesti sepadan dengan nilai name sedia ada dalam foo.

Peranan Kekangan Unik

Untuk menegakkan integriti rujukan, Postgres memerlukan kekangan unik pada lajur yang dirujuk (name dalam jadual foo). Kekangan ini menjamin bahawa setiap nilai name dalam foo adalah unik, membolehkan Postgres mengenal pasti baris yang dirujuk dengan jelas.

Punca Ralat: Hilang Kekangan Unik

Mesej ralat menunjukkan kekangan unik yang hilang pada lajur yang dirujuk oleh kunci asing. Jika lajur name dalam foo tidak mempunyai kekangan unik, Postgres tidak boleh memautkan nilai foo_fk dengan pasti dalam bar ke baris tertentu dalam foo, mengakibatkan ralat.

Menyelesaikan Ralat: Menambah Kekangan Unik

Penyelesaian adalah mudah: tambahkan kekangan unik pada lajur yang dirujuk. Dalam SQL, ini dilakukan menggunakan perintah ALTER TABLE dan ADD CONSTRAINT:

<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_name_unique UNIQUE (name);</code>

Tambahan ini menguatkuasakan keunikan untuk lajur name dalam foo, memenuhi keperluan Postgres untuk integriti rujukan dan membolehkan hubungan kunci asing berfungsi dengan betul. Selepas menambah kekangan, percubaan untuk mencipta hubungan kunci asing sepatutnya berjaya.

Atas ialah kandungan terperinci Mengapa Postgres Membuang Ralat 'Tiada Kekangan Unik Padanan Kunci Diberi' Semasa Mencipta Kunci Asing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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