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

5 måder at kontrollere en kolonnes datatype i SQLite

I SQLite er der en del måder at se på en tabels struktur. Derfor er der en del måder, hvorpå vi kan kontrollere datatypen for kolonnerne i den tabel.

Der er også en funktion, der giver os mulighed for at kontrollere datatypen for en kolonne, der returneres i en forespørgsel.

Her er fem måder at kontrollere datatypen for en kolonne i SQLite.

PRAGMA table_info() Erklæring

PRAGMA table_info() sætning returnerer oplysninger om en specificeret tabel, herunder dens kolonner og datatyper.

Her er et eksempel på returnering af oplysninger om en tabel kaldet Album .

PRAGMA table_info(Album);

Resultat:

cid  name      type           notnull  dflt_value  pk
---  --------  -------------  -------  ----------  --
0    AlbumId   INTEGER        1                    1 
1    Title     NVARCHAR(160)  1                    0 
2    ArtistId  INTEGER        1                    0 

I dette tilfælde blev kolonnerne oprettet med deres datatype eksplicit defineret.

Her er et andet eksempel:

PRAGMA table_info(Events);

Resultat:

cid  name       type     notnull  dflt_value  pk
---  ---------  -------  -------  ----------  --
0    EventId    INTEGER  0                    1 
1    EventName           0                    0 
2    StartDate           0                    0 
3    EndDate             0                    0 

I dette tilfælde er det kun den første kolonne, der har sin datatype eksplicit defineret.

SQLite bruger en anden tilgang til datatyper end de andre store RDBMS'er. SQLite bruger et dynamisk indtastningssystem, og derfor er datatypen for en værdi forbundet med selve værdien, ikke med dens container.

Når det er sagt, tillader SQLite os eksplicit at angive datatypen for kolonner. I ovenstående eksempler blev nogle kolonner oprettet med deres datatype eksplicit defineret, og vi kan se, hvad disse datatyper er ved at køre ovenstående PRAGMA erklæring.

PRAGMA table_xinfo() Erklæring

PRAGMA table_xinfo() sætningen er nøjagtig den samme som PRAGMA table_info() sætning, bortset fra at den også returnerer skjulte kolonner på virtuelle tabeller:

PRAGMA table_xinfo(Album);

Resultat:

cid  name      type           notnull  dflt_value  pk  hidden
---  --------  -------------  -------  ----------  --  ------
0    AlbumId   INTEGER        1                    1   0     
1    Title     NVARCHAR(160)  1                    0   0     
2    ArtistId  INTEGER        1                    0   0     

Vi kan se, at det grundlæggende er det samme som table_info() , undtagen med den ekstra kolonne.

.schema Kommando

En anden måde at hente en tabels struktur på er ved at bruge .schema kommando. Dette er en af ​​flere metoder, du kan bruge til at returnere den SQL, der blev brugt til at oprette tabellen.

Eksempel:

.schema Album

Resultat:

CREATE TABLE Chinook.[Album]
(
    [AlbumId] INTEGER  NOT NULL,
    [Title] NVARCHAR(160)  NOT NULL,
    [ArtistId] INTEGER  NOT NULL,
    CONSTRAINT [PK_Album] PRIMARY KEY  ([AlbumId]),
    FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) 
		ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX Chinook.[IFK_AlbumArtistId] ON [Album] ([ArtistId]);

Denne metode giver os mulighed for at generere den SQL, der kræves for at genskabe tabellen – herunder angive eventuelle datatyper.

sqlite_schema Tabel

Du kan bruge sqlite_schema tabel til det samme som det foregående eksempel.

Her er et eksempel, der bruger den samme tabel.

SELECT sql 
FROM Chinook.sqlite_schema 
WHERE tbl_name = 'Album';

Resultat:

CREATE TABLE [Album]
(
    [AlbumId] INTEGER  NOT NULL,
    [Title] NVARCHAR(160)  NOT NULL,
    [ArtistId] INTEGER  NOT NULL,
    CONSTRAINT [PK_Album] PRIMARY KEY  ([AlbumId]),
    FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId]) 
		ON DELETE NO ACTION ON UPDATE NO ACTION
)
CREATE INDEX [IFK_AlbumArtistId] ON [Album] ([ArtistId]) 

sqlite_schema tabel kan også tilgås ved hjælp af sqlite_master .

typeof() Funktion

Du kan bruge typeof() funktion for at få datatypen for en kolonne returneret af en forespørgsel. Mere specifikt returnerer det datatypen for det givne udtryk.

Eksempel:

SELECT typeof(Title) FROM Album
LIMIT 1;

Resultat:

text

Her brugte jeg LIMIT klausul for at begrænse resultatet til kun én række, ellers ville vi se det samme resultat gentaget for hver række i tabellen.

Husk, at denne metode returnerer datatypen for det udtryk, der returneres af forespørgslen - ikke den faktiske datatype, der er tildelt kolonnen. De mulige returnerede typer er:

  • null
  • integer
  • real
  • text
  • blob

Hver kolonne i en SQLite-database er tildelt en af ​​ovenstående type-tilknytninger.

Disse omtales faktisk som opbevaringsklasser. En lagerklasse er mere generel end en datatype. Alle værdier i SQL-sætninger, uanset om de er bogstaver indlejret i SQL-sætningstekst eller parametre bundet til prækompilerede SQL-sætninger, har en implicit lagerklasse. Databasemotoren kan konvertere værdier mellem numeriske lagerklasser (INTEGER og REAL ) og TEXT under udførelse af forespørgsel.

Flere oplysninger om datatyper i SQLite

Se SQLite-datatyper (SQLite-dokumentation) og The Advantages Of Flexible Typing (SQLite-dokumentation) for mere information om datatyper i SQLite.

Se også STRICT tabeller (SQLite-dokumentation), en funktion, der blev tilføjet i SQLite version 3.37.0 den 2021-11-27, der giver os mulighed for at afvise det fleksible skrivesystem og i stedet håndhæve det traditionelle stive typesystem, der findes i alle andre SQL-databasemotorer og i SQL-standarden.


  1. Hvordan kan jeg oprette en liste Array med markørdata i Android

  2. Hvorfor er Oracle tabel/kolonne/indeksnavne begrænset til 30 tegn?

  3. Konverter 'datetime offset' til 'time' i SQL Server (T-SQL-eksempler)

  4. Valg af et SQL Server-overvågningsværktøj, der passer til dine behov