文章转载自修改sqlite字段类型,若有侵权,请联系删除。
在单机版部署的环境中,在软件升级时,对数据库的修改一般是用 SQL 语句来实现(不可能叫客户用 SQLite Expert 自己修改吧),本来用 SQL 语句修改字段不是啥复杂的事,举例如下:
-- 增加字段
ALTER TABLE Cftea_table Add column_name new_data_type
-- 删除字段
ALTER TABLE Cftea_table DROP COLUMN column_name
-- 修改字段类型
ALTER TABLE Cftea_table ALTER COLUMN column_name new_data_type
但是在 SQLite 中却不能这么做,因为 SQLite 目前还不支持直接修改字段。
只有变通处理如下:
-- 把原表改成另外一个名字作为暂存表
ALTER TABLE old_table_name RENAME TO temp_table_name;
-- 如果需要,可以删除原表的索引
DROP INDEX ix_name;
-- 用原表的名字创建新表
CREATE TABLE old_table_name(field_name INTEGER PRIMARY KEY AUTOINCREMENT, other_field_name text not null);
-- 如果需要,可以创建新表的索引
CREATE INDEX ix_name ON old_table_name(field_name);
-- 将暂存表数据写入到新表,很方便的是不需要去理会自动增长的 ID
INSERT INTO old_table_name SELECT * FROM temp_table_name
-- 删除暂存表
DROP TABLE temp_table_name;