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

Mysql-kolonnebegrænsning som ikke tom / påkrævet

Jeg antager, at du ikke vil have tom (tom streng i modsætning til NULL ) værdier, der skal tillades i tabellen enten.

Normalt er det, hvad en CHECK begrænsning for. Du gør noget som

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

Dog MySQL analyserer begrænsningen, men håndhæver den ikke. Du har stadig lov til at indsætte tomme værdier.

For at omgå det skal du oprette en BEFORE INSERT udløse og hæve et signal ved et forsøg på at indsætte en tom værdi:

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 det samme på BEFORE UPDATE hvis du også vil forbyde opdateringer til en tom værdi.



  1. Sådan kontrolleres konfigurationsindstillingerne for databasemail i SQL Server (T-SQL)

  2. Konvertering af rækker med for mange værdier til kolonner

  3. Hvorfor ville rækker matche, men ikke blive ændret med en mysql-opdateringserklæring?

  4. Hvordan ændres værdien for innodb_buffer_pool_size i MySQL på Mac OS?