Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich bedingte Nicht-Null-Einschränkungen für mehrere Spalten in mySql definieren?

Leider unterstützt MySQL keine CHECK-Einschränkungen . Es analysiert sie und verwirft dann stillschweigend die Einschränkung, genau wie es bei Fremdschlüssel-Einschränkungen in einer MyISAM-Tabelle der Fall ist. Es gibt Ihnen nicht einmal eine Warnung über den nicht unterstützten Einschränkungstyp, was meiner Meinung nach eine schlechte Designentscheidung ihrerseits ist.

Hier ist eine Lösung mit einem Trigger:

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 //

Sie sollten auch einen ähnlichen Trigger BEFORE UPDATE erstellen auf demselben Tisch.

Siehe http://dev.mysql.com/doc/refman/ 5.6/en/signal.html für weitere Informationen zum SIGNAL -Anweisung zum Auslösen von Ausnahmen in MySQL-Triggern oder gespeicherten Routinen.