V SQLite existuje několik způsobů, jak se podívat na strukturu tabulky. Existuje tedy několik způsobů, jak můžeme zkontrolovat datový typ sloupců v této tabulce.
K dispozici je také funkce, která nám umožňuje zkontrolovat datový typ sloupce vráceného v dotazu.
Zde je pět způsobů, jak zkontrolovat datový typ sloupce v SQLite.
PRAGMA table_info() Prohlášení
PRAGMA table_info() příkaz vrací informace o zadané tabulce, včetně jejích sloupců a datových typů.
Zde je příklad vrácení informací o tabulce s názvem Album .
PRAGMA table_info(Album); Výsledek:
cid name type notnull dflt_value pk --- -------- ------------- ------- ---------- -- 0 AlbumId INTEGER 1 1 1 Title NVARCHAR(160) 1 0 2 ArtistId INTEGER 1 0
V tomto případě byly sloupce vytvořeny s explicitně definovaným typem dat.
Zde je další příklad:
PRAGMA table_info(Events); Výsledek:
cid name type notnull dflt_value pk --- --------- ------- ------- ---------- -- 0 EventId INTEGER 0 1 1 EventName 0 0 2 StartDate 0 0 3 EndDate 0 0
V tomto případě má svůj datový typ explicitně definován pouze první sloupec.
SQLite používá odlišný přístup k datovým typům než ostatní hlavní RDBMS. SQLite používá systém dynamického typování, takže datový typ hodnoty je spojen s hodnotou samotnou, nikoli s jejím kontejnerem.
To znamená, že SQLite nám umožňuje explicitně specifikovat datový typ sloupců. Ve výše uvedených příkladech byly některé sloupce vytvořeny s explicitně definovaným datovým typem. O jaké datové typy se jedná, můžeme zjistit spuštěním výše uvedeného PRAGMA prohlášení.
PRAGMA table_xinfo() Prohlášení
PRAGMA table_xinfo() příkaz je přesně stejný jako PRAGMA table_info() kromě toho, že také vrací skryté sloupce ve virtuálních tabulkách:
PRAGMA table_xinfo(Album); Výsledek:
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
Vidíme, že je to v podstatě stejné jako table_info() , kromě sloupce navíc.
Schéma .schema Příkaz
Dalším způsobem, jak získat strukturu tabulky, je použití .schema příkaz. Toto je jedna z několika metod, které můžete použít k vrácení SQL použitého k vytvoření tabulky.
Příklad:
.schema Album Výsledek:
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]); Tato metoda nám umožňuje generovat SQL potřebné k opětovnému vytvoření tabulky – včetně zadání jakýchkoli datových typů.
sqlite_schema Tabulka
Můžete použít sqlite_schema tabulky na stejnou věc jako v předchozím příkladu.
Zde je příklad použití stejné tabulky.
SELECT sql
FROM Chinook.sqlite_schema
WHERE tbl_name = 'Album'; Výsledek:
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 k tabulce lze také přistupovat pomocí sqlite_master .
typeof() Funkce
Můžete použít typeof() funkce k získání datového typu sloupce vráceného dotazem. Přesněji řečeno, vrací datový typ daného výrazu.
Příklad:
SELECT typeof(Title) FROM Album
LIMIT 1; Výsledek:
text
Zde jsem použil LIMIT klauzule k omezení výsledku pouze na jeden řádek, jinak bychom viděli stejný výsledek opakující se pro každý řádek v tabulce.
Mějte na paměti, že tato metoda vrací datový typ výrazu vráceného dotazem – nikoli skutečný datový typ přiřazený ke sloupci. Možné vrácené typy jsou:
nullintegerrealtextblob
Každému sloupci v databázi SQLite je přiřazena jedna z výše uvedených typových afinit.
Tyto jsou ve skutečnosti označovány jako třídy úložiště. Třída úložiště je obecnější než datový typ. Všechny hodnoty v příkazech SQL, ať už jde o literály vložené do textu příkazu SQL nebo parametry vázané na předkompilované příkazy SQL, mají implicitní třídu úložiště. Databázový stroj může převádět hodnoty mezi numerickými třídami úložiště (INTEGER a REAL ) a TEXT během provádění dotazu.
Další informace o datových typech v SQLite
Další informace o datových typech v SQLite naleznete v tématu Datové typy SQLite (dokumentace SQLite) a Výhody flexibilního psaní (dokumentace SQLite).
Viz také STRICT tabulky (dokumentace SQLite), funkce, která byla přidána ve verzi SQLite 3.37.0 dne 27. 11. 2021, která nám umožňuje odmítnout systém flexibilního psaní a místo toho vynutit tradiční systém rigidního typu, který se nachází ve všech ostatních databázových strojích SQL a v standard SQL.