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 的数据库表,其中包含以下记录:

EmpIDNameCityAgeSalary
1JohnLondon253000
2MarryNew York242750
3JoParis272800
4KimAmsterdam303100
5RameshNew Delhi283000
6HuangBeijing282800

重命名表:以下语句用于将Employee表重命名为Employee_new:

ALTER TABLE Employee 
RENAME TO Employee_new;

--查看结果
SELECT * FROM Employee_new; 

这将产生如下所示的结果:

EmpIDNameCityAgeSalary
1JohnLondon253000
2MarryNew York242750
3JoParis272800
4KimAmsterdam303100
5RameshNew Delhi283000
6HuangBeijing282800

重命名列:下面的语句用于将 Name 列替换为 EmployeeName:

ALTER TABLE Employee 
RENAME Name TO EmployeeName;

--查看结果
SELECT * FROM Employee; 

这将产生如下所示的结果:

EmpIDEmployeeNameCityAgeSalary
1JohnLondon253000
2MarryNew York242750
3JoParis272800
4KimAmsterdam303100
5RameshNew Delhi283000
6HuangBeijing282800

添加列:要在Employee表中添加名为Address的列,语句如下:

ALTER TABLE Employee 
ADD COLUMN Address VARCHAR(255);

--查看结果
SELECT * FROM Employee; 

这将产生如下所示的结果:

EmpIDEmployeeCityAgeSalaryAddress
1JohnLondon253000
2MarryNew York242750
3JoParis272800
4KimAmsterdam303100
5RameshNew Delhi283000
6HuangBeijing282800

删除一列:删除Employee 表中Salary列,可以使用以下语句:

ALTER TABLE Employee 
DROP COLUMN Salary;

--查看结果
SELECT * FROM Employee; 

这将产生下面提到的结果:

EmpIDEmployeeCityAge
1JohnLondon25
2MarryNew York24
3JoParis27
4KimAmsterdam30
5RameshNew Delhi28
6HuangBeijing28

修改列

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。有关 SQLite 数据库中可用的所有数据类型的完整参考,请参阅数据类型参考