Użyjesz słowa kluczowego unsigned
aby oznaczyć, że liczba całkowita nie zezwala na "znak" (tj. - może być tylko dodatni):
CREATE TABLE test (
test_column int(11) unsigned
);
Możesz przeczytać więcej o numerycznych typach danych (ze znakiem i bez znaku) tutaj .
O ile rzeczywiste ograniczenie aby zapobiec wstawianiu wartości ujemnych, MySQL ma CHECK
klauzula, która może być użyta w CREATE TABLE
oświadczenie jednak zgodnie z dokumentacją:
Dla porównania, oto jak go użyć (i chociaż będzie działać absolutnie dobrze, po prostu nic nie robi - jak mówi instrukcja):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
AKTUALIZUJ (całkowite odrzucenie wartości ujemnych)
Na podstawie kilku Twoich komentarzy zauważyłem, że chcesz, aby zapytania z wartościami ujemnymi były całkowicie odrzucane i nie były ustawione na 0
(jako normalna transakcja do unsigned
kolumna zrobiłaby). Ogólnie rzecz biorąc, nie ma ograniczenia, które mogłoby to zrobić (przynajmniej o tym wiem), jeśli włączysz tryb ścisły (z STRICT_TRANS_TABLES
) każde zapytanie, które wstawia wartość ujemną do kolumny bez znaku, zakończy się błędem (wraz z innymi błędami wstawiania danych, takimi jak nieprawidłowe enum
wartość).
Możesz to przetestować, uruchamiając następujące polecenie przed poleceniami wstawiania:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
A jeśli to działa, możesz zaktualizować konfigurację MySQL za pomocą sql-mode="STRICT_TRANS_TABLES"
lub użyj SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES';
(Nie jestem pewien, czy SET
polecenie wpłynie jednak na globalną konfigurację mysql, więc może być lepiej zaktualizować rzeczywisty plik konfiguracyjny).