SQLite 支持 ALTER TABLE 的有限子集。 SQLite 中的 ALTER TABLE 关键字可用于对现有表执行以下更改:
- 重命名表
- 重命名列
- 添加列
- 删除列
语法
在 SQLite 中使用 ALTER TABLE 关键字的语法如下:
/* 重命名表 */
ALTER TABLE table_name
RENAME TO table_name_new;
/* 重命名列 */
ALTER TABLE table_name
RENAME column_name TO column_name_new;
/* 添加列 */
ALTER TABLE table_name
ADD COLUMN column_name datatype;
/* 删除列 */
ALTER TABLE table_name
DROP COLUMN column_name;
示例:
考虑一个名为 Employee 的数据库表,其中包含以下记录:
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | New York | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
4 | Kim | Amsterdam | 30 | 3100 |
5 | Ramesh | New Delhi | 28 | 3000 |
6 | Huang | Beijing | 28 | 2800 |
重命名表:以下语句用于将Employee表重命名为Employee_new:
ALTER TABLE Employee
RENAME TO Employee_new;
--查看结果
SELECT * FROM Employee_new;
这将产生如下所示的结果:
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | New York | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
4 | Kim | Amsterdam | 30 | 3100 |
5 | Ramesh | New Delhi | 28 | 3000 |
6 | Huang | Beijing | 28 | 2800 |
重命名列:下面的语句用于重命名将 Name 列替换为 EmployeeName:
ALTER TABLE Employee
RENAME Name TO EmployeeName;
--查看结果
SELECT * FROM Employee;
这将产生如下所示的结果:
EmpID | EmployeeName | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | New York | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
4 | Kim | Amsterdam | 30 | 3100 |
5 | Ramesh | New Delhi | 28 | 3000 |
6 | Huang | Beijing | 28 | 2800 |
添加列:要在Employee表中添加名为Address的列,语句如下:
ALTER TABLE Employee
ADD COLUMN Address VARCHAR(255);
--查看结果
SELECT * FROM Employee;
这将产生如下所示的结果:
EmpID | Employee | City | Age | Salary | Address |
---|---|---|---|---|---|
1 | John | London | 25 | 3000 | |
2 | Marry | New York | 24 | 2750 | |
3 | Jo | Paris | 27 | 2800 | |
4 | Kim | Amsterdam | 30 | 3100 | |
5 | Ramesh | New Delhi | 28 | 3000 | |
6 | Huang | Beijing | 28 | 2800 |
删除一列:删除Employee 表中 salary 列,可以使用以下语句:
ALTER TABLE Employee
DROP COLUMN Salary;
--查看结果
SELECT * FROM Employee;
这将产生下面提到的结果:
EmpID | Employee | City | Age |
---|---|---|---|
1 | John | London | 25 |
2 | Marry | New York | 24 |
3 | Jo | Paris | 27 |
4 | Kim | Amsterdam | 30 |
5 | Ramesh | New Delhi | 28 |
6 | Huang | Beijing | 28 |
修改列
SQLite不支持ALTER TABLE语句来修改表的现有列。但是,这可以通过以下步骤来实现:
- 应检查外键约束
- 将表重命名为其他名称
- 创建一个结构相同但修改列的新表
- 将重命名表中的数据复制到新表
- 最后开启外键约束
在上面的例子中,Age列的数据类型是DECIMAL。要将列的数据类型更改为 DOUBLE,可以使用以下语句:
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE Employee RENAME TO Employee_old;
CREATE TABLE Employee (
EmpID INT,
Name VARCHAR(255),
City VARCHAR(255),
Age DOUBLE,
Salary DECIMAL(6,2)
);
INSERT INTO Employee SELECT * FROM Employee_old;
COMMIT;
PRAGMA foreign_keys=on;
这会将 Age 列的数据类型从 DECIMAL 更改为 DOUBLE。