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

Restrição de coluna do Mysql como não vazia / necessária


Eu suponho que você não queira em branco (string vazia, ao contrário de NULL ) a serem permitidos na tabela também.

Normalmente, é isso que um CHECK restrição para. Você faz algo como
CREATE TABLE
        mytable
        (
        myfield NOT NULL VARCHAR(200),
        CHECK(myfield > '')
        )

No entanto, MySQL analisa a restrição, mas não a impõe. Você ainda tem permissão para inserir valores vazios.

Para contornar isso, crie um BEFORE INSERT acionar e levantar um sinal na tentativa de inserir um valor em branco:
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;

Faça o mesmo em BEFORE UPDATE se você também quiser proibir atualizações para um valor em branco.