Trong SQLite, bạn có thể sử dụng câu lệnh PRAGMA để trả về danh sách các khóa ngoại cho một bảng nhất định.
Cú pháp
Cú pháp như sau:
PRAGMA foreign_key_list(table-name);
Ở đâu table-name
là tên của bảng mà bạn muốn có danh sách các khóa ngoại.
Ví dụ
Đầu tiên, hãy tạo một bảng có ràng buộc khóa ngoại.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type
);
CREATE TABLE Pets(
PetId INTEGER PRIMARY KEY,
PetName,
TypeId,
FOREIGN KEY(TypeId) REFERENCES Types(TypeId)
);
Trong trường hợp này, tôi đã tạo hai bảng. Thú cưng bảng có ràng buộc khóa ngoại tham chiếu đến Loại bảng.
Bây giờ tôi có thể sử dụng PRAGMA foreign_key_list(table-name)
câu lệnh để truy xuất khóa ngoại đó.
.mode line
PRAGMA foreign_key_list(Pets);
Kết quả (sử dụng đầu ra dọc):
id = 0 seq = 0 table = Types from = TypeId to = TypeId on_update = NO ACTION on_delete = NO ACTION match = NONE
Câu lệnh PRAGMA này trả về tám cột, vì vậy tôi đã sử dụng .mode line
để xuất kết quả theo chiều dọc. Điều này giúp bạn không phải cuộn sang hai bên.
Trong trường hợp này, chỉ có một ràng buộc khóa ngoại trên bảng. Nếu có nhiều hơn, chúng sẽ được liệt kê trong kết quả.
Không có khóa ngoại
Đây là điều sẽ xảy ra nếu tôi chạy cùng một câu lệnh PRAGMA trên một bảng mà không có bất kỳ khóa ngoại nào.
PRAGMA foreign_key_list(Types);
Kết quả (sử dụng đầu ra dọc):
(Phần này trống vì không có khóa ngoại.)
Trả về câu lệnh TẠO BẢNG
Câu lệnh sau có thể được sử dụng để trả về mã SQL thực được sử dụng để tạo mỗi bảng có khóa ngoại.
.mode column
SELECT sql
FROM sqlite_master
WHERE sql LIKE('%REFERENCES%');
Kết quả:
CREATE TABLE Pets( PetId INTEGER PRIMARY KEY, PetName, TypeId, FOREIGN KEY(TypeId) REFERENCES Types(TypeId) )
Trong trường hợp này, cơ sở dữ liệu chỉ chứa một khóa ngoại (khóa mà tôi đã tạo cho ví dụ này). Nếu có nhiều hơn, CREATE TABLE
tất cả các câu lệnh sẽ được liệt kê trong các kết quả này.