Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso definir restrições condicionais não nulas em várias colunas no mySql?


Infelizmente, MySQL não suporta restrições CHECK . Ele as analisa e então descarta silenciosamente a restrição, assim como faz para restrições de chave estrangeira em uma tabela MyISAM. Ele nem mesmo avisa sobre o tipo de restrição não suportado, o que eu acho que é uma má decisão de design da parte deles.

Aqui está uma solução usando um gatilho:
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 //

Você também deve criar um gatilho semelhante BEFORE UPDATE na mesma mesa.

Consulte http://dev.mysql.com/doc/refman/ 5.6/en/signal.html para mais informações sobre o SIGNAL instrução para levantar exceções em gatilhos MySQL ou rotinas armazenadas.