В 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 клауза за ограничаване на резултата само до един ред, в противен случай ще видим, че същият резултат се повтаря за всеки ред в таблицата.
Имайте предвид, че този метод връща типа данни на израза, върнат от заявката, а не действителния тип данни, присвоен на колоната. Възможните върнати типове са:
nullintegerrealtextblob
На всяка колона в база данни на SQLite е присвоен един от горните типове афинитети.
Те всъщност се наричат класове за съхранение. Класът за съхранение е по-общ от тип данни. Всички стойности в SQL изрази, независимо дали са литерали, вградени в текст на SQL изрази, или параметри, обвързани с предварително компилирани SQL изрази, имат имплицитен клас за съхранение. Машината на базата данни може да преобразува стойности между числови класове за съхранение (INTEGER и REAL ) и TEXT по време на изпълнение на заявката.
Повече информация за типовете данни в SQLite
Вижте SQLite типове данни (документация за SQLite) и предимствата на гъвкавото писане (документация на SQLite) за повече информация относно типовете данни в SQLite.
Вижте също STRICT таблици (документация на SQLite), функция, която беше добавена в SQLite версия 3.37.0 на 2021-11-27, която ни позволява да откажем гъвкавата система за въвеждане и вместо това да наложим традиционната система с твърд тип, намираща се във всички други машини за бази данни на SQL и в стандарта SQL.