苹果手机怎么找电影资源啊
作者:互联网
SQLite 数据库迁徙
SQLite 数据库有关数据库表结构变化的文档参见官方文档SQLite 数据库表结构修改文档
官方文档中的第5点,专门讲到数据库升级。对第5点进行简单翻译,以确定SQLite官方推荐的升级流程。
数据库升级方案1
SQLite直接支持的唯一更改模式的命令有:rename table (重命名数据库表),rename column (重命名数据库表的列名),add column(在表中新增列)。其他的数据库表结构的修改,可以通过以使用简单的操作序列对表的格式进行修改。对某些表X的模式设计进行任意更改的步骤如下
如果启用了外键约束,使用命令PRAGMA foreign_keys=OFF.将外键约束关闭。
启动一个数据库操作事件。
保存与表X有关的所有索引(index),触发器(trigger)和视图(View)。查询索引,触发器,视图的SQL指令如下。相关索引,触发器,视图可以参见下一个小章节数据库表示例。
使用CREATE TABLE创建一个新的表“new_x”,需要注意的是创建表前要保证“new_x”在数据库中不存在。
将数据库表x的内容拷贝到new_x表中,命令select into new_x (新表列名,...) select (旧表列名,...)from x;
删除旧表,命令drop table x
将新表重命名为旧表,命令 alter table new_x rename to x
使用创建索引(create index),创建触发器(create_trigger),创建视图(create view)指令创建与表X有关的索引,触发器,视图。
如果任何视图以受模式更改影响的方式引用表X,则使用drop VIEW删除这些视图,并使用CREATE VIEW进行必要的更改重新创建它们。
如果启用了外键约束,使用命令PRAGMA foreign_key_check,确保外键约束没有被破坏。
将在第2不创建的事务提交。
如果启用外键约束,使用命令PRAGMA foreign_keys=ON.将外键约束启动,与第一步对应。
注意
数据库升级必须按照以上步骤来执行。下面用了两个表格描述升级过程,第一列是正确的,第二列是错误的。首先看起来两个流程都是完成了数据库的升级的操作,但是第二列的操作是无效的,特别是第二列的第一不重命名数据库表,在原数据库存在触发器,视图,外键约束的时候,直接重命名数据库表,会对触发器,视图,外键约束造成破坏,因此正确的操作是创建一个新表,然后将新表重命名为旧表,操作参见第一列。
正确操作 错误操作
1. 创建新表 1.重命名旧表 为older_x
2.旧表数据拷贝到新表中 2.创建新表 x
3.删除旧表数据 3.拷贝数据将older_x 拷贝到 X
4.新表重命名为旧表名称 4.删除旧表 older_x
数据库升级流程中的12步操作,可以完美的执行数据库升级,包括删除列,修改列属性,等等操作。
数据库升级方案2
官网提供的第二个数据库升级方案是基于数据库表的结构都是存储在sqlite_master这个表中,通过修改sqlite_master中的数据来达到修改数据库表结构的作用。步骤描述如下:
开启一个事务
使用命令PRAGMA schema_version获取当前的schema version。
使用命令 PRAGMA writable_schema=ON。使得数据库表结构可以修改。
修改主表(sqlite_master)中相关的数据库表的定义表结构的sql命令。命令类似update sqlite_master set sql='创建数据库表命令' where type='table' AND name='X';。这步的操作属于比较危险的操作,如果操作不当,容易造成数据库不可读,因此要特别注意。
如果表X的重新创建会影响其原本的索引,触发器,视图,则需要使用update 命令进行相应的修改。比如说修改了列的名称,则与这个列相关的索引,触发器,视图,外键约束必须进行相应的修改。
将第二步获得到的schema version 加1,并使用命令PRAGMA schema_version=X,保存到数据库中。
使用命令 PRAGMA writable_schema=OFF。恢复数据库表结构不可修改。
使用 命令PRAGMA integrity_check确保数据库没有被破坏。
提交事物。
后续SQLite支持表结构修改,修改的方案会是以上描述的其中一个。
数据库表示例
标签:触发器,命令,数据库,电影,视图,外键,苹果,手机,旧表 来源: https://www.cnblogs.com/iheidh/p/12958220.html