Ще използвате ключовата дума unsigned
за да обозначи, че цялото число не позволява "знак" (т.е. - може да бъде само положително):
CREATE TABLE test (
test_column int(11) unsigned
);
Можете да прочетете повече за цифровите типове данни (подписани и неподписани) тук .
Що се отнася до действително ограничение за да предотврати вмъкването на отрицателни стойности, MySQL има CHECK
клауза, която може да се използва в CREATE TABLE
изявление обаче според документацията:
За справка, ето как бихте го използвали (и въпреки че ще се изпълни абсолютно добре, той просто не прави нищо - както се посочва в ръководството):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
АКТУАЛИЗАЦИЯ (напълно отхвърляне на отрицателни стойности)
От няколко от вашите коментари забелязах, че искате заявките с отрицателни стойности да бъдат напълно отхвърлени и да не се задават на 0
(като нормална транзакция в unsigned
колона би свършила работа). Няма ограничение, което да може да направи това като цяло (за което аз поне знам), обаче, ако включите стриктния режим (с STRICT_TRANS_TABLES
) всяка заявка, която вмъква отрицателна стойност в неподписана колона, ще се провали с грешка (заедно с всякакви други грешки при вмъкване на данни, като например невалиден enum
стойност).
Можете да го тествате, като изпълните следната команда преди командите за вмъкване:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
И ако работи за вас, можете или да актуализирате вашата MySQL конфигурация с sql-mode="STRICT_TRANS_TABLES"
или използвайте SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES';
(Не съм сигурен дали SET
все пак ще повлияе на глобалната конфигурация на mysql, така че може да е по-добре да актуализирате действителния конфигурационен файл).