sql >> Database teknologi >  >> RDS >> SQLite

Indstil en standardværdi for en kolonne i SQLite:DEFAULT Constraint

Når du opretter en tabel i SQLite, har du mulighed for at tilføje begrænsninger til hver kolonne.

En sådan begrænsning er DEFAULT begrænsning.

DEFAULT begrænsning giver dig mulighed for at angive en værdi, der skal bruges i tilfælde af, at der ikke er angivet nogen værdi for den kolonne, når en ny række indsættes.

Hvis du ikke brug en DEFAULT klausul, så er standardværdien for en kolonne NULL .

Mulige standardværdier

Den eksplicitte standardværdi for en DEFAULT begrænsning kan være en af ​​følgende:

  • en strengkonstant
  • en klatkonstant
  • et underskrevet nummer
  • ethvert konstant udtryk indesluttet i parentes.
  • CURRENT_TIME
  • CURRENT_DATE
  • CURRENT_TIMESTAMP
  • NULL

Eksempel

Her er et eksempel til at demonstrere.

CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName,
    Price DEFAULT 0.00
);

Her tilføjede jeg en DEFAULT begrænsning af prisen kolonne. I dette tilfælde er standardværdien 0,00 .

Når jeg nu indsætter en ny række uden at angive en værdi for Pris kolonne, bruges standardværdien.

INSERT INTO Products ( ProductId, ProductName ) 
VALUES (1, 'Long Weight');

SELECT * FROM Products;

Resultat:

ProductId   ProductName  Price     
----------  -----------  ----------
1           Long Weight  0.0       

Eksplicitte værdier

Standardværdien bruges selvfølgelig kun, når du ikke eksplicit angiver en værdi. Hvis du gør det, bruges den værdi i stedet.

Her er et andet eksempel. Denne gang giver jeg eksplicit en værdi for den pris kolonne.

INSERT INTO Products ( ProductId, ProductName, Price ) 
VALUES (2, 'Left-Handed Screwdriver', 19.99);

SELECT * FROM Products;

Resultat:

ProductId   ProductName                Price     
----------  -------------------------  ----------
1           Long Weight                0.0       
2           Left-Handed Screwdriver    19.99     

Eksplicitte NULL'er

Det foregående eksempel gælder også for eksplicit angivet NULL værdier.

For at demonstrere dette, her er, hvad der sker, hvis jeg udtrykkeligt indsætter NULL i Pris kolonne.

INSERT INTO Products ( ProductId, ProductName, Price ) 
VALUES (3, 'Elbow Grease', NULL);

SELECT * FROM Products;

Resultat:

ProductId   ProductName               Price     
----------  ------------------------  ----------
1           Long Weight               0.0       
2           Left-Handed Screwdriver   19.99     
3           Elbow Grease                        

Denne gang Prisen kolonnen er NULL , fordi det var det, jeg eksplicit indsatte i den kolonne.

For at forhindre dette i at ske, se Sådan konverteres NULL-værdier til kolonnens standardværdi, når du indsætter data i SQLite.

Standardtidsstempel

I dette eksempel opretter jeg en anden tabel. Denne gang satte jeg standardværdien til det aktuelle tidsstempel.

CREATE TABLE Types( 
    TypeId INTEGER PRIMARY KEY, 
    Type,
    DateInserted DEFAULT CURRENT_TIMESTAMP
);

Og nu til nogle data.

INSERT INTO Types (Type) 
VALUES ( 'Hardware' );

SELECT * FROM Types;

Resultat:

TypeId      Type        DateInserted       
----------  ----------  -------------------
1           Hardware    2020-06-05 00:21:57

Tidsstemplet indsættes som forventet.

Automatisk forøgelse af værdi som en standardværdi

Bemærk, at jeg i det foregående eksempel heller ikke angav en værdi for TypeId kolonne, men den genererede alligevel automatisk en standardværdi.

I dette tilfælde skyldtes standardværdien ikke en DEFAULT begrænsning. Det skyldtes det faktum, at kolonnen er en primær nøglekolonne, der blev oprettet ved hjælp af INTEGER PRIMARY KEY . Når du definerer en kolonne ved hjælp af INTEGER PRIMARY KEY , bliver kolonnen automatisk en kolonne med automatisk stigning.

For at demonstrere dette mere grundigt er her, hvad der sker, hvis jeg indsætter nogle flere rækker.

INSERT INTO Types (Type) 
VALUES 
  ( 'Software' ),
  ( 'Hardcopy' );

SELECT * FROM Types;

Resultat:

TypeId      Type        DateInserted       
----------  ----------  -------------------
1           Hardware    2020-06-05 00:21:57
2           Software    2020-06-05 00:22:14
3           Hardcopy    2020-06-05 00:22:14

For mere information om auto-incrementing-kolonner, se Sådan fungerer AUTOINCREMENT i SQLite, og Sådan opretter du en auto-incrementing-kolonne i SQLite.

Udtryk som en standardværdi

Du kan også bruge et konstant udtryk som standardværdi. For at gøre dette skal udtrykket sættes i parentes.

Her er et eksempel.

CREATE TABLE Person( 
    PersonId INTEGER PRIMARY KEY, 
    Name,
    Entered DEFAULT (round(julianday('now'))),
    Deadline  DEFAULT (round(julianday('now')) + 10.5)
);

Og nu til nogle data.

INSERT INTO Person (Name) 
VALUES ( 'Fred' );

SELECT * FROM Person;

Resultat:

PersonId    Name        Entered     Deadline  
----------  ----------  ----------  ----------
1           Fred        2459006.0   2459016.5 

Bemærk, at udtrykket skal være et konstant udtryk. Et konstant udtryk er et udtryk, der kun indeholder konstanter.

Hvis du prøver at bruge et udtryk, der ikke kun indeholder konstanter, får du en fejl.

CREATE TABLE Person( 
    PersonId INTEGER PRIMARY KEY, 
    FirstName,
    LastName,
    UserName DEFAULT (FirstName || LastName)
);

Resultat:

Error: default value of column [UserName] is not constant

  1. DATEDIFF() Eksempler – MySQL

  2. Komplet vejledning til at rette SQL-databasefejl 5243

  3. Opret en "I stedet for" Trigger i SQL Server

  4. psql:FATAL:rolle postgres eksisterer ikke