SQLite
 sql >> Database >  >> RDS >> SQLite

5 modi per controllare il tipo di dati di una colonna in SQLite

In SQLite, ci sono diversi modi per guardare la struttura di una tabella. Pertanto, ci sono diversi modi in cui possiamo controllare il tipo di dati delle colonne all'interno di quella tabella.

C'è anche una funzione che ci permette di controllare il tipo di dati di una colonna restituita in una query.

Ecco cinque modi per controllare il tipo di dati di una colonna in SQLite.

Il PRAGMA table_info() Dichiarazione

Il PRAGMA table_info() istruzione restituisce informazioni su una tabella specificata, comprese le relative colonne e tipi di dati.

Ecco un esempio di restituzione di informazioni su una tabella chiamata Album .

PRAGMA table_info(Album);

Risultato:

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

In questo caso, le colonne sono state create con il tipo di dati definito in modo esplicito.

Ecco un altro esempio:

PRAGMA table_info(Events);

Risultato:

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 questo caso, solo la prima colonna ha il tipo di dati definito in modo esplicito.

SQLite utilizza un approccio diverso ai tipi di dati rispetto agli altri principali RDBMS. SQLite utilizza un sistema di tipizzazione dinamica, quindi il tipo di dati di un valore è associato al valore stesso, non al suo contenitore.

Detto questo, SQLite ci consente di specificare esplicitamente il tipo di dati delle colonne. Negli esempi precedenti, alcune colonne sono state create con il loro tipo di dati definito in modo esplicito e possiamo vedere quali sono questi tipi di dati eseguendo il PRAGMA sopra dichiarazione.

Il PRAGMA table_xinfo() Dichiarazione

La PRAGMA table_xinfo() è esattamente la stessa di PRAGMA table_info() istruzione, tranne per il fatto che restituisce anche colonne nascoste su tabelle virtuali:

PRAGMA table_xinfo(Album);

Risultato:

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     

Possiamo vedere che è sostanzialmente lo stesso di table_info() , eccetto con la colonna extra.

Il .schema Comando

Un altro modo per recuperare la struttura di una tabella è utilizzare .schema comando. Questo è uno dei tanti metodi che puoi usare per restituire l'SQL usato per creare la tabella.

Esempio:

.schema Album

Risultato:

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

Questo metodo ci consente di generare l'SQL richiesto per ricreare la tabella, inclusa la specifica di qualsiasi tipo di dati.

Lo sqlite_schema Tabella

Puoi usare lo sqlite_schema tabella alla stessa cosa dell'esempio precedente.

Ecco un esempio che utilizza la stessa tabella.

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

Risultato:

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

Lo sqlite_schema è possibile accedere alla tabella anche utilizzando sqlite_master .

Il typeof() Funzione

Puoi usare typeof() funzione per ottenere il tipo di dati di una colonna restituita da una query. Più specificamente, restituisce il tipo di dati dell'espressione data.

Esempio:

SELECT typeof(Title) FROM Album
LIMIT 1;

Risultato:

text

Qui ho usato il LIMIT clausola per limitare il risultato a una sola riga, altrimenti vedremmo lo stesso risultato ripetuto per ogni riga della tabella.

Tieni presente che questo metodo restituisce il tipo di dati dell'espressione restituita dalla query, non il tipo di dati effettivo assegnato alla colonna. I possibili tipi restituiti sono:

  • null
  • integer
  • real
  • text
  • blob

A ogni colonna in un database SQLite viene assegnata una delle affinità di tipo sopra.

Queste sono in realtà denominate classi di archiviazione. Una classe di archiviazione è più generale di un tipo di dati. Tutti i valori nelle istruzioni SQL, siano essi letterali incorporati nel testo dell'istruzione SQL o parametri associati a istruzioni SQL precompilate, hanno una classe di archiviazione implicita. Il motore di database può convertire valori tra classi di archiviazione numeriche (INTEGER e REAL ) e TEXT durante l'esecuzione della query.

Ulteriori informazioni sui tipi di dati in SQLite

Vedere i tipi di dati SQLite (documentazione SQLite) e I vantaggi della digitazione flessibile (documentazione SQLite) per ulteriori informazioni sui tipi di dati in SQLite.

Vedi anche STRICT tabelle (documentazione SQLite), una funzionalità che è stata aggiunta in SQLite versione 3.37.0 il 27-11-2021 che ci consente di rifiutare il sistema di tipizzazione flessibile e invece di applicare il tradizionale sistema di tipi rigidi che si trova in tutti gli altri motori di database SQL e in lo standard SQL.