sql >> Databáze >  >> RDS >> SQLite

5 způsobů, jak zkontrolovat datový typ sloupce v SQLite

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:

  • null
  • integer
  • real
  • text
  • blob

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.


  1. MariaDB CURRENT_ROLE() Vysvětleno

  2. Použití sloupce pořadí řazení v databázové tabulce

  3. Přidružování tabulek pomocí databáze místností v Android Studiu

  4. Porovnání serveru MariaDB s clusterem MariaDB