SQL如SQLite所理解
[Top]
改变表
alter-table-stmt: 隐藏
column-def: show
列约束: 显示
冲突条款: 展示
expr: show
raise-function: show
select-stmt: show
common-table-expression: show
复合操作符: 显示
连接子句: 显示
join-constraint: show
join-operator: show
订货期: 展示
结果列: 显示
表或子查询: 显示
foreign-key-clause: show
literal-value: show
signed-number: show
type-name: show
signed-number: show
SQLite 支持 ALTER TABLE 的有限子集。SQLite 中的 ALTER TABLE 命令允许用户重命名表或将新列添加到现有表中。
RENAME TO 语法将表名的名称更改为新表名。该命令不能用于在连接的数据库之间移动表格,只能重命名同一数据库中的表格。
如果正在重命名的表具有触发器或索引,那么它们在重命名后仍保留附加到表。但是,如果有任何视图定义或由触发器执行的引用表的表被重命名的语句,则这些表不会自动修改为使用新表名。如果这是必需的,则必须删除并重新创建触发器或视图定义以手动使用新的表名称。
重要说明: 'ALTER TABLE ... RENAME TO ...'命令不会更新视图内触发器或 SELECT 语句内的动作语句。如果正在重命名的表是从触发器或视图中引用的,那么这些触发器和视图必须由应用程序单独删除和重新创建。
如果在重命名表时启用了外键约束,那么引用被重命名表的任何表中的任何 REFERENCES 子句(表中被重命名或某个其他表)都会被修改,以通过其新名称引用重命名的表。
ADD COLUMN 语法用于将新列添加到现有表中。新列总是附加到现有列列表的末尾。column-def 规则定义了新列的特征。新列可以采用 CREATE TABLE 语句中允许的任何形式,并具有以下限制:
- 该列可能没有 PRIMARY KEY 或 UNIQUE 约束。
- 该列可能没有默认值 CURRENT_TIME,CURRENT_DATE,CURRENT_TIMESTAMP 或括号中的表达式。
- 如果指定了 NOT NULL 约束,那么该列必须具有非 NULL 的默认值。
- 如果启用了外键约束并添加了带有 REFERENCES 子句的列,则该列必须具有 NULL 的默认值。
另请注意,添加 CHECK 约束时,CHECK 约束不会针对表的预先存在的行进行测试。这可能会导致包含违反 CHECK 约束的数据的表。未来版本的 SQLite 可能会更改为在添加它们时验证 CHECK 约束。
ALTER TABLE 命令的执行时间与表中的数据量无关。ALTER TABLE 命令在具有1000万行的表上运行速度与在具有1行的表上运行速度相同。
在数据库上运行 ADD COLUMN 之后,SQLite 版本3.1.3(2005-02-20)及更早版本将无法读取该数据库。
制作其他种类的表格模式变更
SQLite 直接支持的唯一模式更改命令是上面显示的“重命名表”和“添加列”命令。但是,应用程序可以使用简单的操作顺序对表格的格式进行其他任意更改。对某些表 X 的模式设计进行任意更改的步骤如下所示: