Sie würden das Stichwort verwenden unsigned
um anzuzeigen, dass die ganze Zahl nicht ein „Zeichen“ (dh - es kann nur positiv sein) erlaubt :
CREATE TABLE test (
test_column int(11) unsigned
);
Sie mehr über die numerischen Datentypen lesen können here (& unsigned unterzeichnet).
bis zu einem tatsächlich constraint die einschub von negativen Werten zu verhindern, hat MySQL eine CHECK
Klausel, die in der CREATE TABLE
Anweisung verwendet werden kann, aber nach der Dokumentation:
Die CHECK Die Klausel wird analysiert, aber von allen Speicher-Engines ignoriert.
Als Referenz hier ist, wie Sie es verwenden würden (und obwohl es absolut in Ordnung ausgeführt wird, tut es einfach nichts - wie die manuellen Zustände):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
UPDATE (Ablehnung negative Werte vollständig)
Ich habe aus einigen Ihrer Kommentare bemerkt, dass Sie möchten, dass Abfragen mit negativen Werten vollständig zurückgewiesen werden und nicht auf 0
gesetzt werden (wie eine normale Transaktion in eine unsigned
Spalte tun würde). Es gibt keine Einschränkung, die dies im Allgemeinen tun kann (die ich zumindest kenne), aber wenn Sie strict-mode einschalten (mit STRICT_TRANS_TABLES
), wird jede Abfrage, die einen negativen Wert in eine vorzeichenlose Spalte einfügt, mit einem Fehler fehlschlagen (zusammen mit anderen Dateneinfügungsfehlern, wie z. B. einem ungültigen Wert enum
).
Sie können es testen, indem Sie den folgenden Befehl vor Ihrem Einsatz-Befehle ausführen:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
Und wenn es für Sie arbeitet, können Sie entweder aktualisieren Sie Ihre MySQL-Konfigurations mit sql-mode="STRICT_TRANS_TABLES"
oder verwenden SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES';
(ich bin nicht sicher, ob sich der Befehl SET
auf die globale mysql-Konfiguration auswirkt, daher ist es möglicherweise besser, die eigentliche Konfigurationsdatei zu aktualisieren.
'unsigned <<> positiv. 'unsigned' == nicht negativ. Diese – maxhb