In SQLite gibt es einige Möglichkeiten, die Struktur einer Tabelle zu betrachten. Daher gibt es einige Möglichkeiten, wie wir den Datentyp der Spalten in dieser Tabelle überprüfen können.
Es gibt auch eine Funktion, mit der wir den Datentyp einer Spalte überprüfen können, die in einer Abfrage zurückgegeben wird.
Hier sind fünf Möglichkeiten, den Datentyp einer Spalte in SQLite zu überprüfen.
Der PRAGMA table_info()
Erklärung
Die PRAGMA table_info()
-Anweisung gibt Informationen zu einer angegebenen Tabelle zurück, einschließlich ihrer Spalten und Datentypen.
Hier ist ein Beispiel für die Rückgabe von Informationen über eine Tabelle namens Album
.
PRAGMA table_info(Album);
Ergebnis:
cid name type notnull dflt_value pk --- -------- ------------- ------- ---------- -- 0 AlbumId INTEGER 1 1 1 Title NVARCHAR(160) 1 0 2 ArtistId INTEGER 1 0
In diesem Fall wurden die Spalten mit explizit definiertem Datentyp erstellt.
Hier ist ein weiteres Beispiel:
PRAGMA table_info(Events);
Ergebnis:
cid name type notnull dflt_value pk --- --------- ------- ------- ---------- -- 0 EventId INTEGER 0 1 1 EventName 0 0 2 StartDate 0 0 3 EndDate 0 0
In diesem Fall ist nur der Datentyp der ersten Spalte explizit definiert.
SQLite verwendet einen anderen Ansatz für Datentypen als die anderen großen RDBMSs. SQLite verwendet ein dynamisches Typisierungssystem, und daher ist der Datentyp eines Werts mit dem Wert selbst verknüpft, nicht mit seinem Container.
Allerdings erlaubt uns SQLite, den Datentyp von Spalten explizit anzugeben. In den obigen Beispielen wurden einige Spalten mit explizit definiertem Datentyp erstellt, und wir können sehen, was diese Datentypen sind, indem wir das obige PRAGMA
ausführen Aussage.
Der PRAGMA table_xinfo()
Erklärung
Die PRAGMA table_xinfo()
-Anweisung ist genau dieselbe wie die PRAGMA table_info()
-Anweisung, außer dass sie auch versteckte Spalten in virtuellen Tabellen zurückgibt:
PRAGMA table_xinfo(Album);
Ergebnis:
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
Wir können sehen, dass es im Grunde dasselbe ist wie table_info()
, außer mit der zusätzlichen Spalte.
Das .schema
Befehl
Eine andere Möglichkeit, die Struktur einer Tabelle abzurufen, ist die Verwendung von .schema
Befehl. Dies ist eine von mehreren Methoden, die Sie verwenden können, um die SQL zurückzugeben, die zum Erstellen der Tabelle verwendet wurde.
Beispiel:
.schema Album
Ergebnis:
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]);
Mit dieser Methode können wir die zum Neuerstellen der Tabelle erforderliche SQL generieren – einschließlich der Angabe beliebiger Datentypen.
Das sqlite_schema
Tabelle
Sie können das sqlite_schema
verwenden Tabelle auf dasselbe wie im vorherigen Beispiel.
Hier ist ein Beispiel mit derselben Tabelle.
SELECT sql
FROM Chinook.sqlite_schema
WHERE tbl_name = 'Album';
Ergebnis:
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])
Das sqlite_schema
Auf die Tabelle kann auch mit sqlite_master
zugegriffen werden .
Der typeof()
Funktion
Sie können den typeof()
verwenden Funktion, um den Datentyp einer Spalte abzurufen, die von einer Abfrage zurückgegeben wird. Genauer gesagt gibt es den Datentyp des angegebenen Ausdrucks zurück.
Beispiel:
SELECT typeof(Title) FROM Album
LIMIT 1;
Ergebnis:
text
Hier habe ich das LIMIT
verwendet -Klausel, um das Ergebnis auf nur eine Zeile zu beschränken, sonst würden wir das gleiche Ergebnis für jede Zeile in der Tabelle wiederholen sehen.
Beachten Sie, dass diese Methode den Datentyp des von der Abfrage zurückgegebenen Ausdrucks zurückgibt – nicht den tatsächlichen Datentyp, der der Spalte zugewiesen ist. Die möglichen zurückgegebenen Typen sind:
null
integer
real
text
blob
Jeder Spalte in einer SQLite-Datenbank wird eine der oben genannten Typaffinitäten zugewiesen.
Diese werden eigentlich als Speicherklassen bezeichnet. Eine Speicherklasse ist allgemeiner als ein Datentyp. Alle Werte in SQL-Anweisungen, unabhängig davon, ob es sich um in SQL-Anweisungstext eingebettete Literale oder an vorkompilierte SQL-Anweisungen gebundene Parameter handelt, haben eine implizite Speicherklasse. Die Datenbank-Engine kann Werte zwischen numerischen Speicherklassen konvertieren (INTEGER
und REAL
) und TEXT
während der Abfrageausführung.
Weitere Informationen zu Datentypen in SQLite
Weitere Informationen zu Datentypen in SQLite finden Sie unter SQLite-Datentypen (SQLite-Dokumentation) und Vorteile der flexiblen Typisierung (SQLite-Dokumentation).
Siehe auch STRICT
Tabellen (SQLite-Dokumentation), eine Funktion, die in SQLite-Version 3.37.0 am 27.11.2021 hinzugefügt wurde und es uns ermöglicht, das flexible Typisierungssystem abzulehnen und stattdessen das traditionelle starre Typsystem zu erzwingen, das in allen anderen SQL-Datenbank-Engines und in dem SQL-Standard.