sql >> データベース >  >> RDS >> Mysql

2つのテーブルに一意の値を適用します

    複数のテーブル間で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
    

    テーブルごとに同様のトリガーONUPDATEも必要ですが、ONDELETEのトリガーは必要ありません。



    1. PHPを使用してMySQLデータベースからデータを取得し、編集用のフォームに表示する

    2. MySQLデータベース用の.netコア2.1MVCでの一時的な障害処理

    3. 衝突することなくランダムな整数を生成する

    4. エラー1062(23000):キー「PRIMARY」のエントリ「2147483647」が重複しています