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

Apakah ada solusi untuk mendefinisikan batasan unik yang memperlakukan nilai NULL sebagai tidak berbeda?

Seperti yang didokumentasikan dalam CREATE INDEX Sintaks :

Anda tidak dapat menentukan indeks di atas ekspresi (seperti yang diberikan dalam pertanyaan Anda), oleh karena itu UNIQUE MySQL indeks tidak dapat menerapkan batasan seperti yang Anda inginkan.

Sebagai gantinya, Anda dapat membuat BEFORE INSERT pemicu yang menimbulkan kesalahan jika catatan yang cocok sudah ada:

DELIMITER ;;

CREATE TRIGGER uniq1 BEFORE INSERT ON my_table FOR EACH ROW
  IF EXISTS(
    SELECT *
    FROM   my_table
    WHERE  column1 <=> NEW.column1 AND column2 <=> NEW.column2
    LIMIT  1
  ) THEN
    SIGNAL
      SQLSTATE '23000'
      SET MESSAGE_TEXT = 'Duplicate entry for key uniq1';
  END IF;;

Untuk mencegah UPDATE s dari menyebabkan masalah serupa, Anda mungkin ingin membuat BEFORE UPDATE yang serupa pemicu juga.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemula Java membutuhkan bantuan dalam koneksi database

  2. Mysql, Kemungkinan masalah Kategori Bersarang

  3. MYSQL mengatur zona waktu dalam kode PHP

  4. PILIH kolom de-normalisasi menjadi catatan terpisah?

  5. Bagaimana saya bisa mengubah varchar(255) yang diindeks dari utf8 ke utf8mb4 dan masih tetap di bawah 767 panjang kunci maks?