Trong SQLite, bạn có thể sử dụng ALTER TABLE
để thêm một cột vào bảng hiện có.
Đây thực sự là một trong số ít những điều bạn có thể làm với ALTER TABLE
câu lệnh trong SQLite. Những điều duy nhất bạn có thể làm với ALTER TABLE
câu lệnh trong SQLite là đổi tên bảng, đổi tên cột và thêm cột mới vào bảng hiện có.
Ví dụ 1
Hãy tưởng tượng chúng ta có bảng sau:
CREATE TABLE Cats(
CatId INTEGER PRIMARY KEY,
CatName
);
Và bây giờ chúng tôi muốn thêm một cột có tên là DOB . Chúng tôi có thể làm điều đó bằng cách sử dụng mã sau:
ALTER TABLE Cats ADD COLUMN DOB;
Nó đơn giản như vậy.
Hạn chế
Bạn cũng có thể cung cấp các thông số kỹ thuật khác cho định nghĩa, chẳng hạn như các ràng buộc, v.v., nhưng có một số hạn chế.
Cụ thể:
- Cột mới không được có
PRIMARY KEY
hoặcUNIQUE
ràng buộc. - Cột mới không được có giá trị mặc định là
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
hoặc một biểu thức trong ngoặc đơn. - Nếu một
NOT NULL
ràng buộc được chỉ định, sau đó cột phải có giá trị mặc định khác vớiNULL
. - Nếu các ràng buộc khóa ngoại được bật và một cột có
REFERENCES
được thêm vào, cột phải có giá trị mặc định làNULL
. - Nếu cột mới là cột đã tạo, nó không thể được
STORED
cột. Nó có thể là mộtVIRTUAL
cột mặc dù.
Ví dụ 2
Đây là một ví dụ khác, lần này tôi thêm một số thông số kỹ thuật khác vào định nghĩa của cột mới:
CREATE TABLE Dogs(
DogId INTEGER PRIMARY KEY,
DogName
);
Và bây giờ chúng tôi muốn thêm một cột có tên là DOB . Chúng tôi có thể làm điều đó bằng cách sử dụng mã sau:
ALTER TABLE Dogs
ADD COLUMN Score NOT NULL DEFAULT 0;
Kiểm tra các thay đổi
Có một số cách để kiểm tra cấu trúc của một bảng trong SQLite.
Một cách là sử dụng PRAGMA table_info()
tuyên bố.
PRAGMA table_info(Dogs);
Kết quả:
cid name type notnull dflt_value pk --- ------- ------- ---------- ---------- -- 0 DogId INTEGER 0 1 1 DogName 0 0 2 Score 1 0 0
Chúng ta có thể thấy cột mới và có thể thấy rằng nó có NOT NULL
ràng buộc và giá trị mặc định của nó là 0 .