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

Terapkan nilai unik di dua tabel

Anda tidak dapat mendeklarasikan batasan UNIK di beberapa tabel, dan MySQL tidak mendukung batasan CHECK sama sekali. Tapi Anda bisa mendesain pemicu untuk mencari nilai yang cocok di tabel lain. Berikut ini skrip SQL pengujian:

DROP TABLE IF EXISTS foo;
CREATE TABLE FOO (username VARCHAR(10) NOT NULL);

DROP TABLE IF EXISTS bar;
CREATE TABLE BAR (username VARCHAR(10) NOT NULL);

DROP TRIGGER IF EXISTS unique_foo;
DROP TRIGGER IF EXISTS unique_bar;

DELIMITER //

CREATE TRIGGER unique_foo BEFORE INSERT ON foo
FOR EACH ROW BEGIN
  DECLARE c INT;
  SELECT COUNT(*) INTO c FROM bar WHERE username = NEW.username;
  IF (c > 0) THEN
    -- abort insert, because foo.username should be NOT NULL
    SET NEW.username = NULL;
  END IF;
END//

CREATE TRIGGER unique_bar BEFORE INSERT ON bar
FOR EACH ROW BEGIN
  DECLARE c INT;
  SELECT COUNT(*) INTO c FROM foo WHERE username = NEW.username;
  IF (c > 0) THEN
    -- abort insert, because bar.username should be NOT NULL
    SET NEW.username = NULL;
  END IF;
END//

DELIMITER ;

INSERT INTO foo VALUES ('bill');  -- OK

INSERT INTO bar VALUES ('bill');  -- Column 'username' cannot be null

Anda juga memerlukan pemicu serupa ON UPDATE untuk setiap tabel, tetapi Anda tidak memerlukan pemicu apa pun ON DELETE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Haruskah kunci utama basis data berupa bilangan bulat?

  2. SEC_TO_TIME() Contoh – MySQL

  3. mysqldump:Tidak dapat dijalankan. Tabel 'column_statistics' tidak dikenal di information_schema

  4. Kueri gema sebelum eksekusi dan tanpa eksekusi di Rekaman Aktif codeigniter

  5. Apakah ada peningkatan kinerja dalam mengindeks bidang boolean?