sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag definiera villkorliga icke-null-begränsningar på flera kolumner i mySql?

Tyvärr stöder MySQL inte CHECK-begränsningar . Den analyserar dem och förkastar sedan begränsningen tyst, precis som den gör för begränsningar för främmande nyckel på en MyISAM-tabell. Det ger dig inte ens en varning om den ostödda begränsningstypen, vilket jag tycker är ett dåligt designbeslut från deras sida.

Här är en lösning med 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 också skapa en liknande trigger BEFORE UPDATE på samma bord.

Se http://dev.mysql.com/doc/refman/ 5.6/sv/signal.html för mer information om SIGNAL uttalande för att ta fram undantag i MySQL-utlösare eller lagrade rutiner.



  1. Hur man använder AI för SQL Tuning för en riktig automatiserad process

  2. Kan AUTO_INCREMENT säkert användas i en BEFORE TRIGGER i MySQL

  3. Hur konfigurerar jag Java Hibernate för Google Cloud SQL?

  4. skillnad mellan Jquery-tidsstämpel och php-tidsstämpel?