sql >> Database >  >> RDS >> Mysql

Hoe kan ik voorwaardelijke niet-null-beperkingen voor verschillende kolommen in mySql definiëren?

Helaas ondersteunt MySQL geen CHECK-beperkingen . Het ontleedt ze en verwerpt vervolgens stilletjes de beperking, net zoals het doet voor externe sleutelbeperkingen op een MyISAM-tabel. Het geeft je niet eens een waarschuwing over het niet-ondersteunde type beperking, wat volgens mij een slechte ontwerpbeslissing van hun kant is.

Hier is een oplossing met een 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 //

U moet ook een vergelijkbare trigger maken BEFORE UPDATE aan dezelfde tafel.

Zie http://dev.mysql.com/doc/refman/ 5.6/nl/signaal.html voor meer informatie over het SIGNAL statement om uitzonderingen op te roepen in MySQL-triggers of opgeslagen routines.



  1. Haal de naam van de aanroepende procedure of functie op in Oracle PL/SQL

  2. PHP houdt niet van deze T_String. (Syntaxisfout onverwachte T_STRING)

  3. De standaardtaal van een login wijzigen in SQL Server

  4. PostgreSQL-array met elementen die elk een externe sleutel zijn