sql >> Databáze >  >> RDS >> Mysql

Jak mohu definovat podmíněná nenulová omezení na několika sloupcích v mySql?

Bohužel MySQL nepodporuje omezení CHECK . Analyzuje je a pak tiše zahodí omezení, stejně jako to dělá u omezení cizího klíče v tabulce MyISAM. Dokonce vás ani neupozorní na nepodporovaný typ omezení, což je podle mě z jejich strany špatné rozhodnutí.

Zde je řešení pomocí spouštěče:

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

Měli byste také vytvořit podobný spouštěč BEFORE UPDATE na stejném stole.

Viz http://dev.mysql.com/doc/refman/ 5.6/cs/signal.html pro více informací o SIGNAL pro vyvolání výjimek v MySQL triggerech nebo uložených rutinách.



  1. Problém s MySql INSERT MAX()+1

  2. SQL dotaz nefunguje s objednávkou podle

  3. Jak mohu odkazovat na pojmenované parametry ve funkcích Postgres SQL?

  4. Zobrazuji obrázek z databáze PostgreSQL, bytea