Rumah >pangkalan data >tutorial mysql >Mengapa PostgreSQL Membuang 'Tiada Kekangan Unik untuk 'bar' Jadual Rujukan' dan Bagaimana Saya Boleh Membetulkannya?

Mengapa PostgreSQL Membuang 'Tiada Kekangan Unik untuk 'bar' Jadual Rujukan' dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-08 22:13:07546semak imbas

Why Does PostgreSQL Throw

Menyahkod Ralat PostgreSQL: "Tiada Kekangan Unik untuk 'bar' Jadual Rujukan"

Pengguna PostgreSQL 9.1 sering menghadapi ralat yang membingungkan ini apabila membina jadual yang saling berkaitan: "tidak ada kekangan unik padanan kunci yang diberikan untuk "bar" jadual yang dirujuk." Panduan ini menerangkan punca dan penyelesaiannya.

Ralat biasanya timbul apabila jadual (cth., foo, bar, baz) dipautkan melalui kunci asing. Contohnya, bar mungkin merujuk foo menggunakan kunci asing (foo_fk), dan baz rujukan bar menggunakan kunci asing lain (bar_fk).

Masalahnya terletak dalam jadual bar. Walaupun indeks unik mungkin wujud pada lajur gabungan (seperti foo_fk dan name), satu kekangan unik tiada pada lajur name itu sendiri.

Pertimbangkan senario ini: Dua baris dalam bar berkongsi nilai name yang sama (mis., 'ams'). Percubaan untuk memasukkan baris ke dalam baz merujuk 'ams' dalam bar_fk mewujudkan kesamaran. PostgreSQL tidak dapat menentukan baris bar yang betul, mengakibatkan ralat.

Penyelesaian: Tegakkan Keunikan

Pembetulan adalah mudah: tambahkan kekangan unik pada lajur name dalam jadual bar. Gunakan arahan SQL ini:

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

Ini memastikan setiap baris bar mempunyai name yang unik, menyelesaikan kekaburan dan membolehkan perhubungan utama asing yang berjaya. Struktur jadual anda kini akan berfungsi seperti yang dimaksudkan.

Atas ialah kandungan terperinci Mengapa PostgreSQL Membuang 'Tiada Kekangan Unik untuk 'bar' Jadual Rujukan' dan Bagaimana Saya Boleh Membetulkannya?. 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