Batasan unik yang memungkinkan nilai kosong di MySQL

125

Saya memiliki bidang yang menyimpan kode produk. Kodenya unik, tetapi beberapa produk tidak memiliki kode. Saya tidak dapat menemukan kode karena itu adalah kode penyedia.

Apakah batasan semacam ini mungkin terjadi di MySQL?

Saya seorang noob dengan prosedur dan pemicu tersimpan, jadi jika solusinya melibatkan salah satu dari ini, harap bersabar.

Pembaruan: Kolom ini TIDAK Null. Itulah mengapa saya tidak dapat melakukan ini.

Disintegrator
sumber
Kemungkinan duplikat dari Apakah MySQL mengabaikan nilai null pada batasan unik?
Amir Ali Akbari
@AmirAliAkbari Sungguh lucu bagaimana keduanya terhubung satu sama lain sebagai "kemungkinan duplikat". Tapi yang ini lebih tua. :)
Pijusn

Jawaban:

182

Ya, Anda bisa melakukan ini. Lihat referensi MySQL (versi 5.5) .

Indeks UNIQUE membuat batasan sehingga semua nilai dalam indeks harus berbeda. Kesalahan terjadi jika Anda mencoba menambahkan baris baru dengan nilai kunci yang cocok dengan baris yang ada. Untuk semua mesin, indeks UNIQUE memungkinkan beberapa nilai NULL untuk kolom yang dapat berisi NULL.

EricC
sumber
8
Terima kasih. Saya harus membuatnya menjadi null
The Disintegrator
punya masalah ini dalam model django. Menjadikannya nullable berfungsi. Terima kasih
Shrey
13

Ya, jika Anda membuat kolom kode produk menjadi nullable (tidak dideklarasikan dengan NOT NULL), kunci unik akan memungkinkan beberapa baris dengan NULLkode produk.

kekacauan
sumber
Terima kasih. Saya harus membuatnya menjadi null
The Disintegrator
8

MySQL masih memungkinkan beberapa baris memiliki nilai NULLdalam kolom unik.

cg.
sumber
Terima kasih. Saya harus membuatnya menjadi null
The Disintegrator
@MianAnjum dicetak tebal: CREATE TABLE table( keyint (11) NOT NULL AUTO_INCREMENT, fieldtinyint (1) DEFAULT NULL )
Paul Nowak