Použili byste klíčové slovo unsigned
což znamená, že celé číslo neumožňuje "znaménko" (tj. - může být pouze kladné):
CREATE TABLE test (
test_column int(11) unsigned
);
Můžete si přečíst více o numerických typech dat (podepsaný a nepodepsaný) zde .
Pokud jde o skutečné omezení aby se zabránilo vkládání záporných hodnot, má MySQL CHECK
klauzule, kterou lze použít v CREATE TABLE
prohlášení však podle dokumentace:
Pro informaci, zde je návod, jak byste to použili (a ačkoli to bude fungovat naprosto v pořádku, prostě nedělá nic - jak uvádí manuál):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
AKTUALIZACE (úplné odmítnutí záporných hodnot)
Z několika vašich komentářů jsem si všiml, že chcete, aby byly dotazy se zápornými hodnotami zcela odmítnuty a nebyly nastaveny na 0
(jako běžná transakce do unsigned
sloupec by stačil). Neexistuje žádné omezení, které by to mohlo udělat obecně (o kterém alespoň vím), pokud však zapnete přísný režim (s STRICT_TRANS_TABLES
) jakýkoli dotaz, který vloží zápornou hodnotu do nepodepsaného sloupce, selže s chybou (spolu s dalšími chybami vkládání dat, jako je neplatný enum
hodnota).
Můžete to otestovat spuštěním následujícího příkazu před příkazy insert-commands:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
A pokud vám to vyhovuje, můžete buď aktualizovat konfiguraci MySQL pomocí sql-mode="STRICT_TRANS_TABLES"
nebo použijte SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES';
(Nejsem si jistý, zda SET
příkaz však ovlivní globální konfiguraci mysql, takže může být lepší aktualizovat skutečný konfigurační soubor).