SQLite - ALTER 命令
SQLite - ALTER TABLE 命令
Section titled “SQLite - ALTER TABLE 命令”ALTER TABLE 命令用于修改现有表的结构(schema)。虽然 SQLite 在历史上对其限制较多,但现代版本提供了一套强大的操作,可以在不丢失数据的情况下演进您的数据库模式。
现代 SQLite 支持的操作包括:
RENAME TO:重命名整个表。ADD COLUMN:向表中添加新列。RENAME COLUMN:重命名现有列(SQLite 3.25.0+ 版本可用)。DROP COLUMN:删除现有列(SQLite 3.35.0+ 版本可用)。
在使用 DROP COLUMN 或 RENAME COLUMN 等新特性之前,请务必检查您的 SQLite 版本(SELECT sqlite_version();)。
1. 重命名表
Section titled “1. 重命名表”ALTER TABLE current_table_name RENAME TO new_table_name;示例:ALTER TABLE COMPANY RENAME TO ORGANIZATIONS;
2. 添加列
Section titled “2. 添加列”ALTER TABLE table_name ADD COLUMN new_column_definition;提供 DEFAULT 值是一个最佳实践,尤其是在向已有数据的表中添加 NOT NULL 列时。
-- 添加一个带默认值的新列,以避免现有行中出现 NULL 值。ALTER TABLE EMPLOYEES ADD COLUMN IS_ACTIVE INTEGER NOT NULL DEFAULT 1;3. 重命名列
Section titled “3. 重命名列”-- 注意:需要 SQLite 3.25.0 或更高版本。ALTER TABLE table_name RENAME COLUMN current_column_name TO new_column_name;示例:ALTER TABLE EMPLOYEES RENAME COLUMN SALARY TO ANNUAL_SALARY;
4. 删除列
Section titled “4. 删除列”-- 注意:需要 SQLite 3.35.0 或更高版本。ALTER TABLE table_name DROP COLUMN column_name;示例:ALTER TABLE EMPLOYEES DROP COLUMN TEMP_NOTES;
复杂更改的手动方法
Section titled “复杂更改的手动方法”对于较旧的 SQLite 版本或不支持的直接更改(如更改列的类型或约束),您必须执行手动迁移。过程如下:
- 启动事务:
BEGIN TRANSACTION; - 创建具有所需模式的新表:
CREATE TABLE new_table (...) - 将数据从旧表复制到新表:
INSERT INTO new_table SELECT ... FROM old_table - 删除旧表:
DROP TABLE old_table - 将新表重命名为原始名称:
ALTER TABLE new_table RENAME TO old_table - 重新创建旧表上的所有索引或触发器。
- 提交事务:
COMMIT;
重要注意事项
Section titled “重要注意事项”- 事务:始终将模式更改包装在事务中(
BEGIN/COMMIT)。这使得整个操作具有原子性(atomic),确保如果任何步骤失败,数据库都会回滚到其原始状态。 - 依赖关系:请注意,重命名或删除表和列会破坏任何依赖于它们的视图、触发器或应用程序代码。这些必须手动更新。
- 性能:在非常大的表上执行
ALTER TABLE可能会很慢并锁定表,从而在迁移期间影响应用程序性能。