Mysql
 sql >> Database >  >> RDS >> Mysql

Il vincolo della colonna Mysql non è vuoto/richiesto

Presumo che tu non voglia vuoto (stringa vuota, al contrario di NULL ) valori da consentire anche nella tabella.

Normalmente, questo è ciò che un CHECK vincolo per. Fai qualcosa come

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

Tuttavia, MySQL analizza il vincolo ma non lo applica. Puoi comunque inserire valori vuoti.

Per aggirare il problema, crea un BEFORE INSERT attiva e genera un segnale nel tentativo di inserire un valore vuoto:

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;

Fai lo stesso su BEFORE UPDATE se vuoi vietare anche gli aggiornamenti a un valore vuoto.