Du ville bruge søgeordet unsigned
for at angive, at hele tallet ikke tillader et "tegn" (dvs. - det kan kun være positivt):
CREATE TABLE test (
test_column int(11) unsigned
);
Du kan læse mere om de numeriske datatyper (signeret og usigneret) her .
For så vidt angår en faktisk begrænsning for at forhindre indsættelse af negative værdier har MySQL en check
klausul, der kan bruges i CREATE TABLE
erklæring dog ifølge dokumentationen:
Til reference, her er, hvordan du ville bruge det (og selvom det vil fungere helt fint, gør det bare ingenting - som manualen siger):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
OPDATERING (afviser negative værdier fuldstændigt)
Jeg har bemærket fra et par af dine kommentarer, at du ønsker, at forespørgsler med negative værdier skal afvises fuldstændigt og ikke indstilles til 0
(som en normal transaktion til en usigneret
kolonne ville gøre). Der er ingen begrænsning, der kan gøre dette generelt (som jeg i det mindste kender til), hvis du slår strict-mode til (med STRICT_TRANS_TABLES
) enhver forespørgsel, der indsætter en negativ værdi i en usigneret kolonne, vil mislykkes med en fejl (sammen med eventuelle andre dataindsættelsesfejl, såsom en ugyldig enum
værdi).
Du kan teste det ved at køre følgende kommando før dine insert-kommandoer:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
Og hvis det virker for dig, kan du enten opdatere din MySQL-konfiguration med sql-mode="STRICT_TRANS_TABLES"
eller brug SET @@GLOBAL.sql_mode ='STRICT_TRANS_TABLES';
(Jeg er ikke sikker på, om SET
kommandoen vil dog påvirke den globale mysql config, så det kan være bedre at opdatere den faktiske config-fil).