U zou het trefwoord unsigned
. gebruiken om aan te geven dat het gehele getal geen "teken" toestaat (d.w.z. - het kan alleen positief zijn):
CREATE TABLE test (
test_column int(11) unsigned
);
U kunt meer lezen over de numerieke gegevenstypen (ondertekend en niet-ondertekend) hier .
Voor zover een daadwerkelijke beperking om het invoegen van negatieve waarden te voorkomen, heeft MySQL een CHECK
clausule die kan worden gebruikt in de CREATE TABLE
verklaring, echter volgens de documentatie:
Ter referentie, hier is hoe je het zou gebruiken (en hoewel het absoluut prima zal werken, doet het gewoon niets - zoals de handleiding aangeeft):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
UPDATE (negatieve waarden volledig verwerpen)
Ik heb uit een paar van uw opmerkingen opgemerkt dat u wilt dat zoekopdrachten met negatieve waarden volledig worden afgewezen en niet worden ingesteld op 0
(als een normale transactie naar een unsigned
kolom zou doen). Er is echter geen beperking die dit in het algemeen kan doen (dat weet ik tenminste), als je de strikte modus inschakelt (met STRICT_TRANS_TABLES
) elke query die een negatieve waarde invoegt in een niet-ondertekende kolom zal mislukken met een fout (samen met andere fouten bij het invoegen van gegevens, zoals een ongeldige enum
waarde).
U kunt het testen door het volgende commando uit te voeren voorafgaand aan uw insert-commando's:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
En als het voor u werkt, kunt u uw MySQL-configuratie bijwerken met sql-mode="STRICT_TRANS_TABLES"
of gebruik SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES';
(Ik weet niet zeker of de SET
commando heeft echter invloed op de globale mysql-configuratie, dus het kan beter zijn om het eigenlijke configuratiebestand bij te werken).