SQLite hỗ trợ một tập hợp con giới hạn của tiêu chuẩn SQL ALTER TABLE
tuyên bố.
Trong SQLite, ALTER TABLE
cho phép người dùng đổi tên bảng hoặc thêm cột mới vào bảng hiện có.
Thêm cột
ADD COLUMN
cú pháp được sử dụng để thêm một cột mới vào một bảng hiện có.
Hãy thêm một cột vào Nghệ sĩ bảng:
ALTER TABLE Artists ADD COLUMN Bio TEXT;
Và sau đó kiểm tra bảng với .schema
lệnh:
sqlite> .schema Artists CREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL , Bio TEXT);
Các hạn chế sau áp dụng khi sử dụng ADD COLUMN
cú pháp trong SQLite:
- Cột có thể không có
PRIMARY KEY
hoặcUNIQUE
ràng buộc. - Cột có thể không 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
mệnh đề được thêm vào, cột phải có giá trị mặc định là NULL .
Đổi tên bảng
RENAME TO
cú pháp cho phép bạn thay đổi tên của một bảng.
Hãy đổi tên một trong các bảng của chúng ta:
ALTER TABLE Albums RENAME TO Albums1;
Và kiểm tra nó bằng .tables
lệnh:
sqlite> .tables Albums1 Artists
Bây giờ, bất kỳ thao tác nào tiếp theo sẽ cần sử dụng tên mới của bảng. Vì vậy, chúng tôi có thể chọn dữ liệu như sau:
SELECT AlbumName, Year FROM Artists AS a INNER JOIN Albums1 AS r ON a.ArtistId = r.ArtistId WHERE a.ArtistName = 'Joe Satriani';
AlbumName Year -------------------- -------------------------------------------------- Surfing with the Ali 1987 Flying in a Blue Dre 1989 Black Swans and Worm 2010
Cập nhật hoặc giảm cột
SQLite không hỗ trợ các mệnh đề như DROP COLUMN
, ALTER COLUMN
và ADD CONSTRAINT
, là một phần của tiêu chuẩn SQL.
Tuy nhiên, có những cách khác để thực hiện những điều này với SQLite.
Thay đổi một cột
Giả sử chúng tôi muốn thay đổi tên của
Năm
cột thành
Ngày phát hành
. Ngoài ra, chúng tôi muốn xóa NOT NULL
hạn chế.
Để thực hiện việc này, bạn có thể tạo một bảng mới (với định nghĩa cột mới), điền dữ liệu từ bảng cũ vào bảng, sau đó sau khi hoàn tất, hãy xóa bảng cũ và đổi tên bảng mới để phản ánh tên ban đầu.
Tạo bảng mới
Đầu tiên, tạo bảng mới (lưu ý ReleaseDate
thay vì Year
).
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, ReleaseDate TEXT, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
Vì vậy, bây giờ chúng ta có các bảng sau trong cơ sở dữ liệu của mình:
sqlite> .tables Albums Albums1 Artists
Chèn dữ liệu
Sau đó, chèn dữ liệu từ bảng cũ.
Sử dụng INSERT
câu lệnh chọn dữ liệu từ bảng cũ và chèn nó vào bảng mới. Như thế này:
INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId FROM Albums1;
Xác minh rằng dữ liệu đã được chèn vào bảng mới:
sqlite> SELECT * FROM Albums; AlbumId AlbumName ReleaseDate ArtistId -------- ------------------------------- ----------- ---------- 1 Killers 1981 7 2 Powerslave 1984 7 3 Surfing with the Alien 1987 1 4 Heavy as a Really Heavy Thing 1995 11 5 Yummy Yummy 1994 17 6 Out of the Loop 2007 6 7 Suck on This 1989 13 8 Pork Soda 1993 13 9 Sailing the Seas of Cheese 1991 13 10 Flying in a Blue Dream 1989 1 11 Black Swans and Wormhole Wizard 2010 1 12 Somewhere in Time 1986 7 13 Big Red Car 1995 17
Bỏ bảng cũ
Bây giờ bảng mới đã được tạo và điền dữ liệu, chúng tôi có quyền lựa chọn xóa bảng cũ, sửa đổi hoặc giữ nguyên bảng đó.
Hãy để nó ngay bây giờ, chúng ta sẽ gỡ bỏ nó sau.
Thả một cột
Để bỏ một cột, bạn có thể tạo một bảng từ SELECT
tuyên bố. Trong SELECT
câu lệnh, bỏ qua / các cột mà bạn muốn bỏ - SQLite sẽ chỉ tạo những cột được bao gồm trong SELECT
tuyên bố.
CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId FROM Albums1;
Và sau đó kiểm tra xem dữ liệu đã được chèn thành công vào bảng mới chưa:
sqlite> select * from Albums2; AlbumId AlbumName ArtistId -------- ------------------------------- ---------- 1 Killers 7 2 Powerslave 7 3 Surfing with the Alien 1 4 Heavy as a Really Heavy Thing 11 5 Yummy Yummy 17 6 Out of the Loop 6 7 Suck on This 13 8 Pork Soda 13 9 Sailing the Seas of Cheese 13 10 Flying in a Blue Dream 1 11 Black Swans and Wormhole Wizard 1 12 Somewhere in Time 7 13 Big Red Car 17
Vì vậy, bây giờ chúng tôi có các bảng sau trong cơ sở dữ liệu của mình:
sqlite> .tables Albums Albums1 Albums2 Artists