sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg definere betingede ikke-null-begrænsninger på flere kolonner i mySql?

MySQL understøtter desværre ikke CHECK-begrænsninger . Den analyserer dem og kasserer derefter begrænsningen stille, ligesom den gør for fremmednøglebegrænsninger på en MyISAM-tabel. Det giver dig ikke engang en advarsel om den ikke-understøttede begrænsningstype, hvilket jeg synes er en dårlig designbeslutning fra deres side.

Her er en løsning ved hjælp af en 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 //

Du bør også oprette en lignende trigger BEFORE UPDATE på samme bord.

Se http://dev.mysql.com/doc/refman/ 5.6/da/signal.html for mere information om SIGNAL sætning for at rejse undtagelser i MySQL-udløsere eller lagrede rutiner.



  1. Centos 6 PHP OCI8-udvidelsen virker ikke (Udefineret funktion oci_connect())

  2. Eksporter Postgresql-tabeldata ved hjælp af pgAdmin

  3. Sådan fungerer Extract() i PostgreSQL

  4. Oprette en database ved hjælp af Connector/NET-programmering?