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

Contrainte de colonne Mysql non vide/requise

Je suppose que vous ne voulez pas de blanc (chaîne vide, par opposition à NULL ) valeurs à autoriser dans le tableau.

Normalement, c'est ce qu'un CHECK contrainte pour. Vous faites quelque chose comme

CREATE TABLE
        mytable
        (
        myfield NOT NULL VARCHAR(200),
        CHECK(myfield > '')
        )

Cependant, MySQL analyse la contrainte mais ne l'applique pas. Vous êtes toujours autorisé à insérer des valeurs vides.

Pour contourner ce problème, créez un BEFORE INSERT déclencher et émettre un signal lors d'une tentative d'insertion d'une valeur vide :

CREATE TRIGGER
        tr_mytable_bi
BEFORE INSERT
ON      mytable
FOR EACH ROW
BEGIN
        IF NEW.myfield = '' THEN
                SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'Blank value on mytable.myfield';
        END IF;
END;

Faites de même sur BEFORE UPDATE si vous souhaitez également interdire les mises à jour d'une valeur vide.