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

Restricción de columna Mysql como no vacía / requerida

Supongo que no quiere espacios en blanco (cadena vacía, a diferencia de NULL) ) valores que se permitirán en la tabla.

Normalmente, eso es lo que un CHECK restricción para. Haces algo como

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

Sin embargo, MySQL analiza la restricción pero no la aplica. Aún puede insertar valores vacíos.

Para evitar eso, cree un BEFORE INSERT disparar y generar una señal en un intento de insertar un valor en blanco:

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;

Haz lo mismo en BEFORE UPDATE si también desea prohibir las actualizaciones de un valor en blanco.