一、数据库升级,主要有以下这几种情况:
- 增加表
- 删除表
- 修改表
(1) 更改表名字
(2) 增加表字段
(3) 删除表字段、更改一个已经存在字段的名称、数据类型等等
按实现方式分类
1、删除一个已经存在的字段,或者更改一个已经存在字段的名称、数据类型等等
2、增加表、删除表、增加表字段、修改表名字
二、增加表和删除表
问题不大,因为它们都没有涉及到数据的迁移问题,增加表只是在原来的基础上CRTATE TABLE,而删除表就是对历史数据不需要了,那只要DROP TABLE即可。那么修改表呢?
三、修改表
1、 SQLite 仅仅支持 ALTER TABLE 语句的一部分功能,我们可以用 ALTER TABLE 语句来更改一个表的名字,也可向表中增加一个字段(列)。
ALTER TABLE 旧表名 RENAME TO 新表名 // 改变表名
ALTER TABLE 表名 ADD COLUMN 列名 数据类型 // 增加一列
2、 但是我们不能删除一个已经存在的字段,或者更改一个已经存在字段的名称、数据类型等等。
这时候只能使用复制表思想了,具体步骤如下:
// 将表名改为临时表
ALTER TABLE student RENAME TO student_temp;
// 创建新表
CREATE TABLE student (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT);
// 导入数据
INSERT INTO student (id, name) SELECT id, title FROM student_temp;
// 更新sqlite_sequence
UPDATE sqlite_sequence SET seq = 3 WHERE name = student;
// 由于在SQLite中使用自增长字段,引擎会自动产生一个sqlite_sequence表,
// 用于记录每个表的自增长字段的已使用的最大值,所以要一起更新下。
// 如果有没有设置自增长,则跳过此步骤。
// 删除临时表(可选)
DROP TABLE student_temp;
四、增加表、删除表、增加表的字段、更改表名字
这几种情况参考:Android SQLite数据库版本升级原理解析