Ya, MySQL menyediakan kemampuan untuk melakukan ini.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
Saya tidak tahu untuk apa Anda menggunakan tabel ini, tetapi sepertinya kunci unik ini mungkin merupakan kandidat kuat untuk kunci utama tabel. Kunci utama secara otomatis juga merupakan kunci unik. Jika Anda memutuskan untuk menjadikannya sebagai kunci utama, lakukan hal berikut sebagai gantinya:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(Jika Anda menerima pesan kesalahan bahwa sudah ada kunci utama, maka keluarkan ALTER TABLE MyTable DROP PRIMARY KEY
lalu ulangi perintah di atas.)
Sunting: Menanggapi komentar pengguna
Anda tidak dapat memiliki beberapa baris dengan non-NULL
yang identik nilai untuk kolom yang dicakup oleh kunci unik. Jadi Anda tidak dapat memiliki dua baris di mana group_id = 0 AND user_id = 5
, Misalnya. 0 adalah sebuah nilai. Tetapi jika Anda membuat salah satu atau kedua kolom menjadi nullable, Anda bisa memiliki beberapa baris yang identik hingga pemosisian NULL
s. Jadi, Anda dapat memiliki dua (atau lebih) baris dengan group_id IS NULL AND user_id = 1234
.
Ketentuan:Hal di atas berlaku untuk kedua mesin penyimpanan MySQL yang umum digunakan (MyISAM dan InnoDB). MySQL memang memiliki mesin penyimpanan di mana NULL
dianggap sebagai nilai unik, tetapi Anda mungkin tidak menggunakannya.
Jika Anda membuat satu atau kedua kolom menjadi null, maka kunci unik Anda tidak dapat menjadi kunci utama - kunci utama harus berada pada kolom yang NOT NULL
.
Misalkan Anda telah menjadikan kunci ini sebagai kunci utama Anda dan sekarang Anda ingin mengizinkan NULL
di group_id
kolom. Saya tidak tahu tipe data apa group_id
adalah saat ini; Saya akan menganggap saat ini INT UNSIGNED NOT NULL
, tetapi Anda harus memodifikasi di bawah ini jika bukan ini. Anda tidak akan dapat lagi menggunakan kunci ini sebagai kunci utama Anda. Berikut adalah perintah yang dapat Anda jalankan untuk membuat perubahan yang diinginkan:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)