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 TABLEchỉ đổ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ó
UNIQUEhoặcPRIMARY KEYràng buộc. - Nếu cột mới có
NOT NULLràng buộc, bạn phải chỉ định giá trị mặc định cho cột khác vớiNULLgiá trị. - Cột mới không được có giá trị mặc định là
CURRENT_TIMESTAMP,CURRENT_DATEvàCURRENT_TIMEhoặ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','john.doe@example.com','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.