sql >> Database >  >> RDS >> SQLite

Stel een standaardwaarde in voor een kolom in SQLite:DEFAULT-beperking

Bij het maken van een tabel in SQLite heb je de mogelijkheid om beperkingen toe te voegen aan elke kolom.

Een dergelijke beperking is de DEFAULT beperking.

De DEFAULT constraint stelt u in staat een waarde op te geven die moet worden gebruikt in het geval dat er geen waarde wordt opgegeven voor die kolom wanneer een nieuwe rij wordt ingevoegd.

Als u niet gebruik een DEFAULT clausule, dan is de standaardwaarde voor een kolom NULL .

Mogelijke standaardwaarden

De expliciete standaardwaarde van een DEFAULT beperking kan een van de volgende zijn:

  • een tekenreeksconstante
  • een blob-constante
  • een ondertekend nummer
  • elke constante expressie tussen haakjes.
  • CURRENT_TIME
  • CURRENT_DATE
  • CURRENT_TIMESTAMP
  • NULL

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

Hier heb ik een DEFAULT . toegevoegd beperking tot de Prijs kolom. In dit geval is de standaardwaarde 0,00 .

Als ik nu een nieuwe rij invoeg zonder een waarde op te geven voor de Prijs kolom, wordt de standaardwaarde gebruikt.

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

SELECT * FROM Products;

Resultaat:

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

Expliciete waarden

Natuurlijk wordt de standaardwaarde alleen gebruikt als u niet expliciet een waarde opgeeft. Als u dat doet, wordt in plaats daarvan die waarde gebruikt.

Hier is nog een voorbeeld. Deze keer geef ik expliciet een waarde op voor die Prijs kolom.

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

SELECT * FROM Products;

Resultaat:

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

Expliciete NULL's

Het vorige voorbeeld is ook van toepassing op expliciet opgegeven NULL waarden.

Om dit te demonstreren, is dit wat er gebeurt als ik expliciet NULL invoeg in de Prijs kolom.

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

SELECT * FROM Products;

Resultaat:

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

Deze keer de Prijs kolom is NULL , want dat is wat ik expliciet in die kolom heb ingevoegd.

Zie Hoe u NULL-waarden converteert naar de standaardwaarde van de kolom bij het invoegen van gegevens in SQLite om dit te voorkomen.

Standaard tijdstempel

In dit voorbeeld maak ik een andere tabel aan. Deze keer heb ik de standaardwaarde ingesteld op de huidige tijdstempel.

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

En nu wat gegevens.

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

SELECT * FROM Types;

Resultaat:

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

De tijdstempel wordt ingevoegd zoals verwacht.

Waarde automatisch verhogen als standaardwaarde

Merk op dat ik in het vorige voorbeeld ook geen waarde heb opgegeven voor de TypeId kolom, maar het genereerde toch automatisch een standaardwaarde.

In dit geval was de standaardwaarde niet te wijten aan een DEFAULT beperking. Dit kwam doordat de kolom een ​​primaire sleutelkolom is die is gemaakt met INTEGER PRIMARY KEY . Wanneer u een kolom definieert met behulp van INTEGER PRIMARY KEY , wordt de kolom automatisch een kolom voor automatisch ophogen.

Om dit grondiger te demonstreren, is dit wat er gebeurt als ik wat meer rijen invoeg.

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

SELECT * FROM Types;

Resultaat:

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

Voor meer informatie over automatisch oplopende kolommen, zie Hoe AUTOINCREMENT werkt in SQLite en Hoe u een automatisch oplopende kolom maakt in SQLite.

Uitdrukkingen als standaardwaarde

U kunt ook een constante uitdrukking als standaardwaarde gebruiken. Om dit te doen, moet de uitdrukking tussen haakjes staan.

Hier is een voorbeeld.

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

En nu wat gegevens.

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

SELECT * FROM Person;

Resultaat:

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

Merk op dat de uitdrukking een constante uitdrukking moet zijn. Een constante uitdrukking is een uitdrukking die alleen constanten bevat.

Als je een uitdrukking probeert te gebruiken die niet alleen constanten bevat, krijg je een foutmelding.

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

Resultaat:

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

  1. kan object niet verwijderen vanwege beperking van refererende sleutels

  2. Alle Oracle Database-rechten voor een gebruiker weergeven

  3. SQL CREATE TABLE Syntaxis - weergegeven door DBMS

  4. Hoe bigint-veld op te maken in een datum in Postgresql?