SQLite
 sql >> Datenbank >  >> RDS >> SQLite

5 Möglichkeiten, den Datentyp einer Spalte in SQLite zu überprüfen

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.