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

mySqlのいくつかの列に条件付きの非null制約を定義するにはどうすればよいですか?

    残念ながら、MySQL は、CHECK制約をサポートしていません 。 MyISAMテーブルの外部キー制約の場合と同様に、それらを解析してから、制約をサイレントに破棄します。サポートされていない制約タイプについての警告も表示されません。これは、設計上の決定としては不適切だと思います。

    トリガーを使用した解決策は次のとおりです。

    mysql> DELIMITER //
    mysql> CREATE TRIGGER check_one_not_null BEFORE INSERT ON mytable FOR EACH ROW 
        IF COALESCE(NEW.D, NEW.E, NEW.F) IS NULL 
        THEN SIGNAL SQLSTATE '45000' 
          SET MESSAGE_TEXT = 'One of D, E, or F must have a non-null value.';
        END IF //
    

    同様のトリガーをBEFORE UPDATEで作成する必要もあります 同じテーブルに。

    http://dev.mysql.com/doc/refman/を参照してください5.6 / en / signal.html SIGNALの詳細については MySQLトリガーまたはストアドルーチンで例外を発生させるステートメント。



    1. 重複値を使用したMySQL結果からの多次元ネスト配列の作成(PHP)

    2. 説明に使用するデータ型は何ですか?

    3. AzureSQLデータベースの自動チューニング

    4. 順番にテーブルに挿入