Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng SQLite ALTER TABLE
để thay đổi cấu trúc của một bảng hiện có.
Không giống như SQL-standard và các hệ thống cơ sở dữ liệu khác, SQLite hỗ trợ một chức năng rất hạn chế của ALTER TABLE
tuyên bố.
Bằng cách sử dụng ALTER TABLE
của SQLite tuyên bố, bạn có thể thực hiện hai hành động:
- Đổi tên bảng.
- Thêm một cột mới vào bảng.
- Đổi tên cột (được hỗ trợ thêm trong phiên bản 3.20.0)
Sử dụng SQLite ALTER TABLE để đổi tên bảng
Để đổi tên bảng, bạn sử dụng ALTER TABLE RENAME TO
sau đây tuyên bố:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Đây là những điểm quan trọng bạn nên biết trước khi đổi tên bảng:
-
ALTER TABLE
chỉ đổi tên một bảng trong cơ sở dữ liệu. Bạn không thể sử dụng nó để di chuyển bảng giữa các cơ sở dữ liệu đính kèm. - Các đối tượng cơ sở dữ liệu như chỉ mục và trình kích hoạt được liên kết với bảng sẽ được liên kết với bảng mới.
- Nếu một bảng được tham chiếu bởi các chế độ xem hoặc câu lệnh trong trình kích hoạt, bạn phải thay đổi định nghĩa của các chế độ xem và trình kích hoạt theo cách thủ công.
Hãy lấy một ví dụ về đổi tên bảng.
Đầu tiên, tạo một bảng có tên devices
có ba cột:name,
model
, serial
; và chèn một hàng mới vào devices
bảng.
CREATE TABLE devices (
name TEXT NOT NULL,
model TEXT NOT NULL,
Serial INTEGER NOT NULL UNIQUE
);
INSERT INTO devices (name, model, serial)
VALUES('HP ZBook 17 G3 Mobile Workstation','ZBook','SN-2015');
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Thứ hai, sử dụng ALTER TABLE RENAME TO
câu lệnh thay đổi devices
bảng tới devices
bảng như sau:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Thứ ba, truy vấn dữ liệu từ devices
bảng để xác minh RENAME
hoạt động.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Sử dụng SQLite ALTER TABLE để thêm cột mới vào bảng
Bạn có thể sử dụng SQLite ALTER TABLE
câu lệnh để thêm một cột mới vào một bảng hiện có. Trong trường hợp này, SQLite nối cột mới vào cuối danh sách cột hiện có.
Phần sau minh họa cú pháp của ALTER TABLE ADD COLUMN
tuyên bố:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Có một số hạn chế đối với cột mới:
- Cột mới không được có
UNIQUE
hoặcPRIMARY KEY
ràng buộc. - Nếu cột mới có
NOT NULL
ràng buộc, bạn phải chỉ định giá trị mặc định cho cột khác vớiNULL
giá trị. - Cột mới không được có giá trị mặc định là
CURRENT_TIMESTAMP
,CURRENT_DATE
vàCURRENT_TIME
hoặc một biểu thức. - Nếu cột mới là khóa ngoại và kiểm tra ràng buộc khóa ngoại được bật, cột mới phải chấp nhận giá trị mặc định
NULL
.
Ví dụ:bạn có thể thêm một cột mới có tên là location
tới devices
bảng:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Sử dụng SQLite ALTER TABLE để đổi tên cột
SQLite đã thêm hỗ trợ đổi tên cột bằng ALTER TABLE RENAME COLUMN
trong phiên bản 3.20.0
Phần sau trình bày cú pháp của ALTER TABLE RENAME COLUMN
tuyên bố:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
Để biết thêm thông tin về cách đổi tên cột, hãy xem hướng dẫn đổi tên cột.
Sử dụng SQLite ALTER TABLE cho các tác vụ khác
Nếu bạn muốn thực hiện các hành động khác, ví dụ:thả một cột, bạn sử dụng các bước sau:
Tập lệnh sau minh họa các bước ở trên:
-- disable foreign key constraint check
PRAGMA foreign_keys=off;
-- start a transaction
BEGIN TRANSACTION;
-- Here you can drop column
CREATE TABLE IF NOT EXISTS new_table(
column_definition,
...
);
-- copy data from the table to the new_table
INSERT INTO new_table(column_list)
SELECT column_list
FROM table;
-- drop the table
DROP TABLE table;
-- rename the new_table to the table
ALTER TABLE new_table RENAME TO table;
-- commit the transaction
COMMIT;
-- enable foreign key constraint check
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
SQLite ALTER TABLE DROP COLUMN
ví dụ
SQLite không hỗ trợ ALTER TABLE DROP COLUMN
tuyên bố. Để bỏ một cột, bạn cần thực hiện các bước ở trên.
Tập lệnh sau tạo hai bảng users
và favorites
và chèn dữ liệu vào các bảng này:
CREATE TABLE users(
UserId INTEGER PRIMARY KEY,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL,
Email TEXT NOT NULL,
Phone TEXT NOT NULL
);
CREATE TABLE favorites(
UserId INTEGER,
PlaylistId INTEGER,
FOREIGN KEY(UserId) REFERENCES users(UserId),
FOREIGN KEY(PlaylistId) REFERENCES playlists(PlaylistId)
);
INSERT INTO users(FirstName, LastName, Email, Phone)
VALUES('John','Doe','[email protected]','408-234-3456');
INSERT INTO favorites(UserId, PlaylistId)
VALUES(1,1);
Code language: SQL (Structured Query Language) (sql)
Câu lệnh sau trả về dữ liệu từ users
bảng:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Và câu lệnh sau trả về dữ liệu từ favorites
bảng:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Giả sử, bạn muốn bỏ cột phone
của users
bảng.
Đầu tiên, vô hiệu hóa kiểm tra ràng buộc khóa ngoại:
PRAGMA foreign_keys=off;
Thứ hai, bắt đầu một giao dịch mới:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
Thứ ba, tạo một bảng mới để chứa dữ liệu của users
bảng ngoại trừ phone
cột:
CREATE TABLE IF NOT EXISTS persons (
UserId INTEGER PRIMARY KEY,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL,
Email TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
Thứ tư, sao chép dữ liệu từ users
tới persons
bảng:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
Thứ năm, loại bỏ users
bảng:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
Thứ sáu, đổi tên persons
bảng cho users
bảng:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
Thứ bảy, thực hiện giao dịch:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
Thứ tám, bật kiểm tra ràng buộc khóa ngoại:
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Đây là users
bảng sau khi đánh rơi phone
cột:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Tóm tắt
- Sử dụng
ALTER TABLE
để sửa đổi cấu trúc của một bảng hiện có. - Sử dụng
ALTER TABLE table_name RENAME TO new_name
để đổi tên bảng. - Sử dụng
ALTER TABLE table_name ADD COLUMN column_definition
để thêm một cột vào bảng. - Sử dụng
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
để đổi tên một cột.