Trong SQLite, có khá nhiều cách để xem cấu trúc của bảng. Do đó, có khá nhiều cách để chúng ta có thể kiểm tra kiểu dữ liệu của các cột bên trong bảng đó.
Ngoài ra còn có một chức năng cho phép chúng tôi kiểm tra loại dữ liệu của một cột được trả về trong một truy vấn.
Dưới đây là năm cách để kiểm tra kiểu dữ liệu của một cột trong SQLite.
PRAGMA table_info()
Tuyên bố
PRAGMA table_info()
câu lệnh trả về thông tin về một bảng được chỉ định, bao gồm các cột và kiểu dữ liệu của nó.
Dưới đây là một ví dụ về việc trả lại thông tin về bảng có tên là Album
.
PRAGMA table_info(Album);
Kết quả:
cid name type notnull dflt_value pk --- -------- ------------- ------- ---------- -- 0 AlbumId INTEGER 1 1 1 Title NVARCHAR(160) 1 0 2 ArtistId INTEGER 1 0
Trong trường hợp này, các cột được tạo với kiểu dữ liệu được xác định rõ ràng.
Đây là một ví dụ khác:
PRAGMA table_info(Events);
Kết quả:
cid name type notnull dflt_value pk --- --------- ------- ------- ---------- -- 0 EventId INTEGER 0 1 1 EventName 0 0 2 StartDate 0 0 3 EndDate 0 0
Trong trường hợp này, chỉ cột đầu tiên có kiểu dữ liệu được xác định rõ ràng.
SQLite sử dụng cách tiếp cận kiểu dữ liệu khác với các RDBMS chính khác. SQLite sử dụng hệ thống nhập động và do đó, kiểu dữ liệu của một giá trị được liên kết với chính giá trị đó, không phải với vùng chứa của nó.
Điều đó nói rằng, SQLite cho phép chúng ta chỉ định rõ ràng kiểu dữ liệu của các cột. Trong các ví dụ trên, một số cột đã được tạo với kiểu dữ liệu của chúng được xác định rõ ràng và chúng ta có thể xem các kiểu dữ liệu đó là gì bằng cách chạy PRAGMA
ở trên tuyên bố.
PRAGMA table_xinfo()
Tuyên bố
PRAGMA table_xinfo()
câu lệnh hoàn toàn giống với PRAGMA table_info()
, ngoại trừ việc nó cũng trả về các cột ẩn trên bảng ảo:
PRAGMA table_xinfo(Album);
Kết quả:
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
Chúng ta có thể thấy rằng nó về cơ bản giống với table_info()
, ngoại trừ cột phụ.
.schema
Lệnh
Một cách khác để truy xuất cấu trúc của bảng là sử dụng .schema
yêu cầu. Đây là một trong số các phương pháp bạn có thể sử dụng để trả về SQL được sử dụng để tạo bảng.
Ví dụ:
.schema Album
Kết quả:
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]);
Phương thức này cho phép chúng ta tạo SQL cần thiết để tạo lại bảng - bao gồm việc chỉ định bất kỳ kiểu dữ liệu nào.
sqlite_schema
Bảng
Bạn có thể sử dụng sqlite_schema
bảng giống như ví dụ trước.
Đây là một ví dụ sử dụng cùng một bảng.
SELECT sql
FROM Chinook.sqlite_schema
WHERE tbl_name = 'Album';
Kết quả:
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
cũng có thể được truy cập bảng bằng sqlite_master
.
typeof()
Chức năng
Bạn có thể sử dụng typeof()
hàm để lấy kiểu dữ liệu của một cột được trả về bởi một truy vấn. Cụ thể hơn, nó trả về kiểu dữ liệu của biểu thức đã cho.
Ví dụ:
SELECT typeof(Title) FROM Album
LIMIT 1;
Kết quả:
text
Ở đây tôi đã sử dụng LIMIT
để giới hạn kết quả chỉ ở một hàng, nếu không, chúng ta sẽ thấy cùng một kết quả được lặp lại cho mỗi hàng trong bảng.
Hãy nhớ rằng phương thức này trả về kiểu dữ liệu của biểu thức được trả về bởi truy vấn - không phải kiểu dữ liệu thực tế được gán cho cột. Các loại có thể được trả về là:
-
null
-
integer
-
real
-
text
-
blob
Mỗi cột trong cơ sở dữ liệu SQLite được gán một trong các kiểu sở thích ở trên.
Chúng thực sự được gọi là các lớp lưu trữ. Một lớp lưu trữ tổng quát hơn một kiểu dữ liệu. Tất cả các giá trị trong các câu lệnh SQL, cho dù chúng là các ký tự được nhúng trong văn bản câu lệnh SQL hay các tham số liên kết với các câu lệnh SQL được biên dịch trước đều có một lớp lưu trữ ngầm định. Công cụ cơ sở dữ liệu có thể chuyển đổi giá trị giữa các lớp lưu trữ dạng số (INTEGER
và REAL
) và TEXT
trong quá trình thực thi truy vấn.
Thông tin thêm về các kiểu dữ liệu trong SQLite
Xem kiểu dữ liệu SQLite (tài liệu SQLite) và Ưu điểm của kiểu gõ linh hoạt (tài liệu SQLite) để biết thêm thông tin về kiểu dữ liệu trong SQLite.
Cũng xem STRICT
bảng (tài liệu SQLite), một tính năng đã được thêm vào SQLite phiên bản 3.37.0 trên 2021-11-27 cho phép chúng tôi từ chối hệ thống nhập linh hoạt và thay vào đó thực thi hệ thống kiểu cứng nhắc truyền thống được tìm thấy trong tất cả các công cụ cơ sở dữ liệu SQL khác và trong tiêu chuẩn SQL.