Mysql
 sql >> база данни >  >> RDS >> Mysql

Прилагане на уникални стойности в две таблици

Не можете да декларирате ограничение UNIQUE в множество таблици, а MySQL изобщо не поддържа CHECK ограничения. Но можете да проектирате тригер за търсене на съответстващата стойност в другата таблица. Ето тестов SQL скрипт:

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

Също така се нуждаете от подобни задействания ПРИ АКТУАЛИЗИРАНЕ за всяка таблица, но не трябва да имате нужда от тригери ПРИ ИЗТРИВАНЕ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да подобрим скоростта на записите в InnoDB в секунда на MySQL DB

  2. Как да направя функцията mysqli connect?

  3. Грешка в MySQL 2006 (HY000) на ред 406:MySQL сървърът е изчезнал

  4. Как да записвате последователни колекции от записи в MySQL

  5. SQL анализатор в PHP?