sql >> Databasteknik >  >> RDS >> Mysql

Hur lägger man till en positiv heltalsrestriktion till en heltalskolumn i MySQL?

Du skulle använda nyckelordet unsigned för att beteckna att heltal inte tillåter ett "tecken" (dvs. - det kan bara vara positivt):

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

Du kan läsa mer om de numeriska datatyperna (signerade och osignerade) här .

Så långt som en faktisk begränsning för att förhindra infogning av negativa värden har MySQL en KONTROLL sats som kan användas i CREATE TABLE uttalande, dock enligt dokumentationen:

Som referens, här är hur du skulle använda det (och även om det kommer att fungera helt bra, gör det bara ingenting - som manualen säger):

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

UPPDATERA (avvisar negativa värden helt)
Jag har märkt av några av dina kommentarer att du vill att frågor med negativa värden ska avvisas helt och inte ställas in på 0 (som en normal transaktion till en osignerad kolumn skulle göra). Det finns dock ingen begränsning som kan göra detta generellt (som jag åtminstone känner till), om du aktiverar strikt läge (med STRICT_TRANS_TABLES ) alla frågor som infogar ett negativt värde i en osignerad kolumn kommer att misslyckas med ett fel (tillsammans med alla andra datainfogningsfel, t.ex. en ogiltig enum värde).

Du kan testa det genom att köra följande kommando före dina insert-kommandon:

SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';

Och om det fungerar för dig kan du antingen uppdatera din MySQL-konfiguration med sql-mode="STRICT_TRANS_TABLES" eller använd SET @@GLOBAL.sql_mode ='STRICT_TRANS_TABLES'; (Jag är inte säker på om SET kommandot kommer dock att påverka den globala mysql-konfigurationen, så det kan vara bättre att uppdatera den faktiska config-filen).



  1. hur man får räkning av värden i mysql

  2. hur man ändrar api_token kolumn i token guard

  3. Vad är PostgreSQL likvärdig med SQL Server NVARCHAR?

  4. Postgres psql utdatasträngar utan escape-tecken