Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menguatkuasakan Kekangan Unik dengan Lajur Boleh Null dalam Jadual Pangkalan Data?

Bagaimana untuk Menguatkuasakan Kekangan Unik dengan Lajur Boleh Null dalam Jadual Pangkalan Data?

Barbara Streisand
Lepaskan: 2025-01-20 23:56:13
asal
182 orang telah melayarinya

How to Enforce Unique Constraints with Nullable Columns in a Database Table?

Kuatkuasakan kekangan unik dalam jadual yang mengandungi lajur boleh batal

Artikel ini membincangkan cabaran mencipta kekangan unik pada jadual yang mengandungi lajur boleh batal. Matlamatnya adalah untuk menghalang berbilang baris daripada mempunyai gabungan nilai yang sama, walaupun lajur yang boleh dibatalkan adalah batal.

Soalan:

Skema jadual yang disediakan mempunyai lajur UserRepository yang boleh dibatalkan. Walau bagaimanapun, pengguna ingin memastikan bahawa untuk setiap pasangan UserId dan RecipeId, hanya satu baris wujud, tanpa mengira nilai MenuId.

Jawapan:

PostgreSQL 15 atau lebih tinggi:

  • Gunakan klausa NULLS NOT DISTINCT dalam definisi kekangan UNIK.
<code class="language-sql">ALTER TABLE Favorites
ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE NULLS NOT DISTINCT (UserId, MenuId, RecipeId);</code>
Salin selepas log masuk

PostgreSQL 14 atau lebih rendah:

  • Buat dua indeks separa:
<code class="language-sql">CREATE UNIQUE INDEX favo_3col_uni_idx ON Favorites (UserId, MenuId, RecipeId)
WHERE MenuId IS NOT NULL;

CREATE UNIQUE INDEX favo_2col_uni_idx ON Favorites (UserId, RecipeId)
WHERE MenuId IS NULL;</code>
Salin selepas log masuk

Kelebihan:

  • Menguatkuasakan kekangan yang diperlukan dengan cekap.

Kelemahan (indeks separa sahaja):

  • Hadkan rujukan kunci asing dan pilihan pengelompokan.
  • Dalam beberapa pertanyaan, ia tidak akan berfungsi jika tiada keadaan WHERE yang sepadan.

Alternatif:

  • Jika berbilang lajur boleh batal terlibat, sila rujuk perbincangan dalam artikel ini: "Mengapa kekangan UNIK saya tidak menyala?".

Atas ialah kandungan terperinci Bagaimana untuk Menguatkuasakan Kekangan Unik dengan Lajur Boleh Null dalam Jadual Pangkalan Data?. 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