Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie füge ich einer Integer-Spalte in MySQL eine positive Integer-Einschränkung hinzu?

Sie würden das Schlüsselwort unsigned verwenden um anzuzeigen, dass die Ganzzahl kein "Vorzeichen" zulässt (d.h. - sie kann nur positiv sein):

CREATE TABLE test (
    test_column int(11) unsigned
);

Sie können mehr über die numerischen Datentypen (mit und ohne Vorzeichen) lesen hier .

Soweit eine tatsächliche Einschränkung Um das Einfügen negativer Werte zu verhindern, hat MySQL einen CHECK -Klausel, die in CREATE TABLE verwendet werden kann Anweisung jedoch laut Dokumentation:

Als Referenz, hier ist, wie Sie es verwenden würden (und obwohl es absolut gut funktioniert, tut es einfach nichts - wie im Handbuch angegeben):

CREATE TABLE test (
    test_column int(11) unsigned CHECK (test_column > 0)
);

AKTUALISIEREN (Negative Werte vollständig ablehnen)
Mir ist aus einigen Ihrer Kommentare aufgefallen, dass Sie möchten, dass Abfragen mit negativen Werten vollständig abgelehnt und nicht auf 0 gesetzt werden (als normale Transaktion in einen unsigned Spalte würde reichen). Es gibt keine Einschränkung, die dies im Allgemeinen tun kann (zumindest weiß ich davon), wenn Sie jedoch den strikten Modus einschalten (mit STRICT_TRANS_TABLES ) schlägt jede Abfrage, die einen negativen Wert in eine unsignierte Spalte einfügt, mit einem Fehler fehl (zusammen mit allen anderen Fehlern beim Einfügen von Daten, z. B. einem ungültigen enum). Wert).

Sie können es testen, indem Sie den folgenden Befehl vor Ihren Einfügebefehlen ausführen:

SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';

Und wenn es für Sie funktioniert, können Sie entweder Ihre MySQL-Konfiguration mit sql-mode="STRICT_TRANS_TABLES" aktualisieren oder verwenden Sie SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES'; (Ich bin mir nicht sicher, ob die SET Der Befehl wirkt sich jedoch auf die globale MySQL-Konfiguration aus, daher ist es möglicherweise besser, die aktuelle Konfigurationsdatei zu aktualisieren).