Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Spaltenbeschränkung als nicht leer / erforderlich

Ich nehme an, Sie wollen kein Leerzeichen (leere Zeichenfolge im Gegensatz zu NULL ) Werte in der Tabelle erlaubt sein.

Normalerweise ist das was für ein CHECK Einschränkung für. Sie tun so etwas wie

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

Allerdings MySQL analysiert die Einschränkung, erzwingt sie jedoch nicht. Sie können weiterhin leere Werte einfügen.

Um dies zu umgehen, erstellen Sie einen BEFORE INSERT auslösen und ein Signal auslösen, wenn versucht wird, einen Leerwert einzufügen:

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;

Machen Sie dasselbe mit BEFORE UPDATE wenn Sie auch Aktualisierungen auf einen leeren Wert verbieten möchten.