Du skulle använda nyckelordet unsigned
för att beteckna att heltal inte tillåter ett "tecken" (dvs. - det kan bara vara positivt):
CREATE TABLE test (
test_column int(11) unsigned
);
Du kan läsa mer om de numeriska datatyperna (signerade och osignerade) här .
Så långt som en faktisk begränsning för att förhindra infogning av negativa värden har MySQL en KONTROLL
sats som kan användas i CREATE TABLE
uttalande, dock enligt dokumentationen:
Som referens, här är hur du skulle använda det (och även om det kommer att fungera helt bra, gör det bara ingenting - som manualen säger):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
UPPDATERA (avvisar negativa värden helt)
Jag har märkt av några av dina kommentarer att du vill att frågor med negativa värden ska avvisas helt och inte ställas in på 0
(som en normal transaktion till en osignerad
kolumn skulle göra). Det finns dock ingen begränsning som kan göra detta generellt (som jag åtminstone känner till), om du aktiverar strikt läge (med STRICT_TRANS_TABLES
) alla frågor som infogar ett negativt värde i en osignerad kolumn kommer att misslyckas med ett fel (tillsammans med alla andra datainfogningsfel, t.ex. en ogiltig enum
värde).
Du kan testa det genom att köra följande kommando före dina insert-kommandon:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
Och om det fungerar för dig kan du antingen uppdatera din MySQL-konfiguration med sql-mode="STRICT_TRANS_TABLES"
eller använd SET @@GLOBAL.sql_mode ='STRICT_TRANS_TABLES';
(Jag är inte säker på om SET
kommandot kommer dock att påverka den globala mysql-konfigurationen, så det kan vara bättre att uppdatera den faktiska config-filen).