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

MySQLの2つの列をチェックする一意の制約

    BEFOREでそれを行うことができます この方法でトリガーする

    CREATE TRIGGER tg_bi_mytable
    BEFORE INSERT ON mytable
    FOR EACH ROW
      SET NEW.address1 = IF(EXISTS
         (
           SELECT * 
            FROM mytable 
           WHERE address1 IN(NEW.address1, NEW.address2) 
              OR address2 IN(NEW.address1, NEW.address2)
         ), NULL, NEW.address1);
    

    注: SIGNALがないMySQLバージョンを使用しているため 秘訣はNOT NULLに違反することです 同じアドレスの行が見つかった場合の列の1つに対する制約。

    こちらがSQLFiddle です。 デモ。最後の挿入ステートメントの1つをコメント解除し、Build Schemaをクリックします 。これらの挿入は成功しません。




    1. mysqlは複数の単語と一致します

    2. なぜデータモデリングが必要なのですか?

    3. mysqlストアドプロシージャで5つのランダムな数値を生成する方法

    4. MySQLでストリームエラーの過去の終わりを読み込もうとしました