SQL As Understood By SQLite

ALTER TABLE

sql-statement ::= ALTER TABLE [database-name .] table-name alteration
alteration ::= RENAME TO new-table-name
alteration ::= ADD [COLUMN] column-def

SQLite版本的 ALTER TABLE 命令允许用户对一个已存在的表重命名或增加一个新列。 但不能从表上删除一列。

RENAME TO 子句将指定表([database-name.]table-name) 改为新表名(new-table-name)。该命令不能在所连的多个数据库间移动表, 只能在同一数据库中更改表名。

如果被更名的表上有触发器或索引,更名后,它们将仍然表该数据表相关。 但是,如果在表上定义有视图,或者在被触发器执行的语句中有该表的名称, 那么,它们将不能被自动同步更新。如果需要,这些触发器或视图定义必须删除后重建, 并在重建时使用新表名。

ADD [COLUMN] 子句用于往已有的表上增加一个新列, 新列将永远追加到已存在列的后面。 Column-def 即列定义,可以使用与 CREATE TABLE 中有关列定义相同的语法, 但有如下限制:

ALTER TABLE 命令的执行时间与表的大小无关。 对于一个有1000万行的表和一个只有一行的表,执行速度没什么区别。

ADD COLUMN 命令执行后,数据库将无法被3.1.3及以前的SQLite读取,除非先执行一个 VACUUM