sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo definir restricciones condicionales no nulas en varias columnas en mySql?

Desafortunadamente, MySQL no admite restricciones CHECK . Los analiza y luego descarta silenciosamente la restricción, tal como lo hace con las restricciones de clave externa en una tabla MyISAM. Ni siquiera le da una advertencia sobre el tipo de restricción no compatible, lo que creo que es una mala decisión de diseño de su parte.

Aquí hay una solución usando un disparador:

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

También debe crear un disparador similar BEFORE UPDATE en la misma mesa.

Consulte http://dev.mysql.com/doc/refman/ 5.6/es/señal.html para más información sobre la SIGNAL instrucción para generar excepciones en disparadores de MySQL o rutinas almacenadas.