SQLite
 sql >> Base de données >  >> RDS >> SQLite

5 façons de vérifier le type de données d'une colonne dans SQLite

Dans SQLite, il existe plusieurs façons de regarder la structure d'une table. Par conséquent, il existe plusieurs façons de vérifier le type de données des colonnes de cette table.

Il existe également une fonction qui nous permet de vérifier le type de données d'une colonne renvoyée dans une requête.

Voici cinq façons de vérifier le type de données d'une colonne dans SQLite.

Le PRAGMA table_info() Déclaration

Le PRAGMA table_info() L'instruction renvoie des informations sur une table spécifiée, y compris ses colonnes et ses types de données.

Voici un exemple de retour d'informations sur une table appelée Album .

PRAGMA table_info(Album);

Résultat :

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

Dans ce cas, les colonnes ont été créées avec leur type de données explicitement défini.

Voici un autre exemple :

PRAGMA table_info(Events);

Résultat :

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

Dans ce cas, seule la première colonne a son type de données explicitement défini.

SQLite utilise une approche des types de données différente de celle des autres principaux SGBDR. SQLite utilise un système de typage dynamique, et ainsi le type de données d'une valeur est associé à la valeur elle-même, et non à son conteneur.

Cela dit, SQLite nous permet de spécifier explicitement le type de données des colonnes. Dans les exemples ci-dessus, certaines colonnes ont été créées avec leur type de données explicitement défini, et nous pouvons voir quels sont ces types de données en exécutant le PRAGMA ci-dessus déclaration.

Le PRAGMA table_xinfo() Déclaration

Le PRAGMA table_xinfo() est exactement la même que la PRAGMA table_info() , sauf qu'elle renvoie également les colonnes masquées sur les tables virtuelles :

PRAGMA table_xinfo(Album);

Résultat :

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     

Nous pouvons voir que c'est fondamentalement la même chose que table_info() , sauf avec la colonne supplémentaire.

Le .schema Commande

Une autre façon de récupérer la structure d'une table est d'utiliser le .schema commande. Il s'agit de l'une des nombreuses méthodes que vous pouvez utiliser pour renvoyer le SQL utilisé pour créer la table.

Exemple :

.schema Album

Résultat :

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]);

Cette méthode nous permet de générer le SQL requis pour recréer la table, y compris en spécifiant tous les types de données.

Le sqlite_schema Tableau

Vous pouvez utiliser le sqlite_schema table à la même chose que l'exemple précédent.

Voici un exemple utilisant le même tableau.

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

Résultat :

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]) 

Le sqlite_schema la table est également accessible à l'aide de sqlite_master .

Le typeof() Fonction

Vous pouvez utiliser le typeof() fonction pour obtenir le type de données d'une colonne renvoyée par une requête. Plus précisément, il renvoie le type de données de l'expression donnée.

Exemple :

SELECT typeof(Title) FROM Album
LIMIT 1;

Résultat :

text

Ici, j'ai utilisé le LIMIT clause pour limiter le résultat à une seule ligne, sinon nous verrions le même résultat répété pour chaque ligne du tableau.

Gardez à l'esprit que cette méthode renvoie le type de données de l'expression renvoyée par la requête, et non le type de données réel affecté à la colonne. Les types possibles renvoyés sont :

  • null
  • integer
  • real
  • text
  • blob

Chaque colonne d'une base de données SQLite se voit attribuer l'une des affinités de type ci-dessus.

Celles-ci sont en fait appelées classes de stockage. Une classe de stockage est plus générale qu'un type de données. Toutes les valeurs des instructions SQL, qu'il s'agisse de littéraux incorporés dans le texte de l'instruction SQL ou de paramètres liés à des instructions SQL précompilées, ont une classe de stockage implicite. Le moteur de base de données peut convertir des valeurs entre les classes de stockage numériques (INTEGER et REAL ) et TEXT lors de l'exécution de la requête.

Plus d'informations sur les types de données dans SQLite

Voir Types de données SQLite (documentation SQLite) et The Advantages Of Flexible Typing (documentation SQLite) pour plus d'informations sur les types de données dans SQLite.

Voir aussi STRICT tables (documentation SQLite), une fonctionnalité qui a été ajoutée dans la version 3.37.0 de SQLite le 2021-11-27 qui nous permet de refuser le système de typage flexible et d'appliquer à la place le système de type rigide traditionnel que l'on trouve dans tous les autres moteurs de base de données SQL et dans la norme SQL.