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

Jeg indstiller en MySQL-kolonne til NOT NULL, men jeg kan stadig indsætte en tom værdi

TØM STRENGE

I ORACLE bruges en tom streng til at repræsentere NUL. I stort set alt andet er en tom streng dog stadig en streng, og altså ikke NULL.


INTS

I dit tilfælde indsætter du faktisk STRINGS i en INT-kolonne. Dette fremtvinger en implicit CAST operation.

Når din RDBMS konverterer strengen '' til en INT skal den få værdien 0. Da 0 ikke er NULL, indsættes dette.

En mere gyldig test ville være:

INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);


REDIGER

Undskyld, jeg læste kun halvt dit spørgsmål. Du spørger også, hvordan du stopper '' bliver indsat.

Dit første problem er, at du indsætter STRINGS, og tabellen er defineret som havende INT-felter. Du kan sætte begrænsninger på de data, der indsættes, men disse begrænsninger vil anvende værdien after en konvertering til en INT. Medmindre du vil forhindre værdien 0 fra også at blive indsat, er der intet du kan gøre ved bordet for at forhindre dette scenario.

Din bedre indsats er at tage fat på, hvorfor du indsætter strenge i første omgang. Du kan bruge en lagret procedure, der tager og kontrollerer strengene, før du konverterer dem til INT'er og derefter indsætter dem. Eller endnu bedre, du kan foretage kontrol i din klientapplikation.

En teknisk tilgængelig mulighed er at lave felterne CHAR felter og derefter sætte en begrænsning på felterne, hvilket forhindrer '' fra at blive indsat. Jeg ville stærkt fraråde dette.



  1. Hvordan får man flere poster mod én post baseret på relation?

  2. Hvordan tæller man den samlede ordrepris?

  3. mysql - søg tidsstempel efter time på dagen

  4. Eksempler på mange-til-mange forhold