Mysql
 sql >> Base de données >  >> RDS >> Mysql

Ajouter une contrainte unique basée sur la valeur du champ

En fait, vous ne pouvez pas définir des structures conditionnelles dans la syntaxe DDL. Votre champ peut être soit NULL ou NOT NULL - il n'y a pas de troisième option (et cela ne peut pas dépendre d'un autre champ dans la structure )

Mais vous pouvez toujours émuler le comportement souhaité via des déclencheurs. Vous pouvez interrompre UPDATE /INSERT déclaration si les données entrantes ne sont pas valides en termes de votre logique. Cela peut être fait via :

CREATE TRIGGER `bannedOnCheck`
BEFORE INSERT ON `fa_ranking_system`.`Player`
FOR EACH ROW
BEGIN
  IF(new.IsBanned && new.BannedOn IS NULL) THEN
    SIGNAL 'Integrity check failed: can not set banned without ban date'
  END IF
END