Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Gunakan beberapa kolom sebagai pengidentifikasi unik untuk mysql

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`)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Cara Mengganti NULL dengan Nilai Berbeda di MySQL

  2. Sisipkan PHP PDO Menggunakan Loop

  3. Data httppost cepat tidak dimasukkan ke database MySQL

  4. MySQL:memilih baris di mana kolomnya nol

  5. Peringatan:mysql_connect():[2002] Tidak ada file atau direktori seperti itu (mencoba terhubung melalui unix:///tmp/mysql.sock) di