SQLite
 sql >> база данни >  >> RDS >> SQLite

5 начина да проверите типа данни на колона в SQLite

В SQLite има доста начини да разгледате структурата на таблицата. Следователно има доста начини, по които можем да проверим типа данни на колоните в тази таблица.

Има и функция, която ни позволява да проверим типа данни на колона, върната в заявка.

Ето пет начина за проверка на типа данни на колона в SQLite.

PRAGMA table_info() Изявление

PRAGMA table_info() оператор връща информация за определена таблица, включително нейните колони и типове данни.

Ето пример за връщане на информация за таблица, наречена Album .

PRAGMA table_info(Album);

Резултат:

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

В този случай колоните са създадени с изрично дефиниран тип данни.

Ето още един пример:

PRAGMA table_info(Events);

Резултат:

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

В този случай само първата колона има изрично дефиниран тип данни.

SQLite използва различен подход към типовете данни от другите основни RDBMS. SQLite използва динамична система за въвеждане и така типът данни на стойност се свързва със самата стойност, а не с нейния контейнер.

Въпреки това SQLite ни позволява изрично да посочим типа данни на колоните. В горните примери бяха създадени някои колони с изрично дефиниран тип данни и можем да видим какви са тези типове данни, като изпълним горната PRAGMA изявление.

PRAGMA table_xinfo() Изявление

PRAGMA table_xinfo() операторът е точно същият като PRAGMA table_info() оператор, с изключение на това, че връща и скрити колони във виртуални таблици:

PRAGMA table_xinfo(Album);

Резултат:

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     

Можем да видим, че по същество е същото като table_info() , освен с допълнителната колона.

.schema Команда

Друг начин за извличане на структурата на таблица е с помощта на .schema команда. Това е един от няколкото метода, които можете да използвате, за да върнете SQL, използван за създаване на таблицата.

Пример:

.schema Album

Резултат:

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

Този метод ни позволява да генерираме SQL, необходим за пресъздаване на таблицата – включително посочване на всякакви типове данни.

sqlite_schema Таблица

Можете да използвате sqlite_schema таблица към същото нещо като предишния пример.

Ето пример за използване на същата таблица.

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

Резултат:

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

sqlite_schema таблицата може да бъде достъпна и чрез sqlite_master .

typeof() Функция

Можете да използвате typeof() функция, за да получите типа данни на колона, върната от заявка. По-конкретно, той връща типа данни на дадения израз.

Пример:

SELECT typeof(Title) FROM Album
LIMIT 1;

Резултат:

text

Тук използвах LIMIT клауза за ограничаване на резултата само до един ред, в противен случай ще видим, че същият резултат се повтаря за всеки ред в таблицата.

Имайте предвид, че този метод връща типа данни на израза, върнат от заявката, а не действителния тип данни, присвоен на колоната. Възможните върнати типове са:

  • null
  • integer
  • real
  • text
  • blob

На всяка колона в база данни на SQLite е присвоен един от горните типове афинитети.

Те всъщност се наричат ​​класове за съхранение. Класът за съхранение е по-общ от тип данни. Всички стойности в SQL изрази, независимо дали са литерали, вградени в текст на SQL изрази, или параметри, обвързани с предварително компилирани SQL изрази, имат имплицитен клас за съхранение. Машината на базата данни може да преобразува стойности между числови класове за съхранение (INTEGER и REAL ) и TEXT по време на изпълнение на заявката.

Повече информация за типовете данни в SQLite

Вижте SQLite типове данни (документация за SQLite) и предимствата на гъвкавото писане (документация на SQLite) за повече информация относно типовете данни в SQLite.

Вижте също STRICT таблици (документация на SQLite), функция, която беше добавена в SQLite версия 3.37.0 на 2021-11-27, която ни позволява да откажем гъвкавата система за въвеждане и вместо това да наложим традиционната система с твърд тип, намираща се във всички други машини за бази данни на SQL и в стандарта SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавете месеци към дата в SQLite

  2. Емулация на SQLite FULL OUTER JOIN

  3. Как да тествате методи, които се занимават с база данни SQLite в android?

  4. 4 таблични изходни режима в SQLite

  5. Базата данни за стаи на Android няма да експортира всички данни