SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

5 maneiras de verificar o tipo de dados de uma coluna no SQLite


No SQLite, existem algumas maneiras de observar a estrutura de uma tabela. Portanto, existem algumas maneiras de verificar o tipo de dados das colunas nessa tabela.

Há também uma função que nos permite verificar o tipo de dados de uma coluna retornada em uma consulta.

Aqui estão cinco maneiras de verificar o tipo de dados de uma coluna no SQLite.

O PRAGMA table_info() Declaração


O PRAGMA table_info() A instrução retorna informações sobre uma tabela especificada, incluindo suas colunas e tipos de dados.

Aqui está um exemplo de retorno de informações sobre uma tabela chamada Album .
PRAGMA table_info(Album);

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

Neste caso, as colunas foram criadas com seu tipo de dados explicitamente definido.

Aqui está outro exemplo:
PRAGMA table_info(Events);

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

Nesse caso, apenas a primeira coluna tem seu tipo de dados definido explicitamente.

SQLite usa uma abordagem diferente para tipos de dados do que os outros RDBMSs principais. O SQLite usa um sistema de tipagem dinâmico e, portanto, o tipo de dados de um valor é associado ao próprio valor, não ao seu contêiner.

Dito isso, o SQLite nos permite especificar explicitamente o tipo de dados das colunas. Nos exemplos acima, algumas colunas foram criadas com seus tipos de dados definidos explicitamente, e podemos ver quais são esses tipos de dados executando o PRAGMA acima demonstração.

A PRAGMA table_xinfo() Declaração


O PRAGMA table_xinfo() instrução é exatamente a mesma que a PRAGMA table_info() instrução, exceto que também retorna colunas ocultas em tabelas virtuais:
PRAGMA table_xinfo(Album);

Resultado:
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     

Podemos ver que é basicamente o mesmo que table_info() , exceto com a coluna extra.

O .schema Comando


Outra maneira de recuperar a estrutura de uma tabela é usando o .schema comando. Este é um dos vários métodos que você pode usar para retornar o SQL usado para criar a tabela.

Exemplo:
.schema Album

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

Esse método nos permite gerar o SQL necessário para recriar a tabela – incluindo a especificação de quaisquer tipos de dados.

O sqlite_schema Tabela


Você pode usar o sqlite_schema table para a mesma coisa que o exemplo anterior.

Aqui está um exemplo usando a mesma tabela.
SELECT sql 
FROM Chinook.sqlite_schema 
WHERE tbl_name = 'Album';

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

O sqlite_schema tabela também pode ser acessada usando sqlite_master .

O typeof() Função


Você pode usar o typeof() função para obter o tipo de dados de uma coluna retornada por uma consulta. Mais especificamente, ele retorna o tipo de dados da expressão fornecida.

Exemplo:
SELECT typeof(Title) FROM Album
LIMIT 1;

Resultado:
text

Aqui eu usei o LIMIT cláusula para limitar o resultado a apenas uma linha, caso contrário, veríamos o mesmo resultado repetido para cada linha da tabela.

Lembre-se de que esse método retorna o tipo de dados da expressão retornada pela consulta – não o tipo de dados real atribuído à coluna. Os tipos possíveis retornados são:
  • null
  • integer
  • real
  • text
  • blob

Cada coluna em um banco de dados SQLite é atribuída a uma das afinidades de tipo acima.

Na verdade, elas são chamadas de classes de armazenamento. Uma classe de armazenamento é mais geral que um tipo de dados. Todos os valores em instruções SQL, sejam literais incorporados no texto da instrução SQL ou parâmetros vinculados a instruções SQL pré-compiladas, têm uma classe de armazenamento implícita. O mecanismo de banco de dados pode converter valores entre classes de armazenamento numérico (INTEGER e REAL ) e TEXT durante a execução da consulta.

Mais informações sobre tipos de dados no SQLite


Consulte Tipos de dados SQLite (documentação do SQLite) e As vantagens da digitação flexível (documentação do SQLite) para obter mais informações sobre os tipos de dados no SQLite.

Veja também STRICT tabelas (documentação do SQLite), um recurso que foi adicionado no SQLite versão 3.37.0 em 27/11/2021 que nos permite recusar o sistema de digitação flexível e, em vez disso, aplicar o sistema de tipo rígido tradicional encontrado em todos os outros mecanismos de banco de dados SQL e em o padrão SQL.