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

Bagaimana menerapkan indeks unik dua arah di beberapa kolom

Di mysql, satu-satunya cara yang dapat saya pikirkan adalah menambahkan beberapa kolom utilitas seperti

CREATE TABLE tbl_challenger (
  host int,
  challenger int,
  u0 int, u1 int
);

dan tambahkan beberapa pemicu yang mengatur u0 dan u1 ke terkecil dan terbesar dari keduanya:

CREATE TRIGGER uinsert BEFORE INSERT ON tbl_challenger
 FOR EACH ROW SET NEW.u0 = LEAST(NEW.host,NEW.challenger),
  NEW.u1 = GREATEST(NEW.host,NEW.challenger);
CREATE TRIGGER uupdate BEFORE UPDATE ON tbl_challenger
 FOR EACH ROW SET NEW.u0 = LEAST(NEW.host,NEW.challenger),
  NEW.u1 = GREATEST(NEW.host,NEW.challenger);

kemudian Anda menambahkan indeks unik pada (u0,u1)

CREATE UNIQUE INDEX uniqueness ON tbl_challenger(u0,u1);

Dan sekarang Anda akan mendapatkan kesalahan saat mencoba memasukkan pasangan duplikat terlepas dari urutannya.

Pada RDBMS yang layak seperti PostgreSQL anda akan dapat menggunakan indeks pada ekspresi:

CREATE UNIQUE INDEX uniqueness ON tbl_challenger
    ( LEAST(host,challenger), GREATEST( host,challenger) );

Jadi, beralihlah sebelum terlambat;-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan ???? di database mysql saat memposting dari kode c # dalam bahasa Persia

  2. Cara JSON mengurai gambar dari mysql dan mengisi tampilan daftar

  3. Bagaimana cara memeriksa apakah tombol aktifkan / nonaktifkan berfungsi?

  4. Bagaimana saya bisa menggabungkan AND dan OR dalam pernyataan SQL saya?

  5. Kursor prosedur tersimpan MySQL untuk pernyataan yang disiapkan