sql >> Databasteknik >  >> RDS >> Mysql

Mysql Kolumn begränsning som inte tom / krävs

Jag antar att du inte vill ha tom (tom sträng, i motsats till NULL ) värden som ska tillåtas i tabellen heller.

Normalt är det vad en CHECK begränsning för. Du gör något liknande

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

Men MySQL analyserar begränsningen men upprätthåller den inte. Du har fortfarande rätt att infoga tomma värden.

För att kringgå det, skapa en BEFORE INSERT utlösa och höja en signal vid ett försök att infoga ett tomt värde:

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;

Gör samma sak på BEFORE UPDATE om du vill förbjuda uppdateringar till ett tomt värde också.



  1. MySQL bästa sättet att lagra långa strängar

  2. Välj kolumn efter alias i MySQL

  3. Flytta SQL Server-databaser till molnet

  4. Beräkna summan av två kolumner i ordning efter sats - laravel