博客
关于我
Sqlite -- 数据迁移备份--从低版本3.6.2到高版本3.8.6
阅读量:536 次
发布时间:2019-03-09

本文共 1910 字,大约阅读时间需要 6 分钟。

引子

在数据库迁移过程中,确保数据安全性和完整性至关重要。本文将详细介绍数据库迁移的关键步骤,包括如何使用.dump命令进行备份、如何准备测试数据、以及如何在高版本数据库上恢复数据和迁移数据。

一、使用.dump命令

.dump命令用于将SQLite数据库导出为SQL格式文件,可以用于数据库迁移。以下是命令的使用方法和解析:

命令帮助提示

.dump ?TABLE? ...

帮助信息的详细说明:

-.dump Sensors温度传感器数据表将仅将该表的数据导出。-.dump TABLENAME相当于推荐将所有名称与 TABLENAME 相匹配的表导出。

理解分析

.dump命令通过生成SQL语句将数据库内容导出,适用于数据库迁移。默认情况下结果输出到屏幕,支持将输出重定向到文件。

命令示例

sqlite>.dump

如果要重定向到文件可以使用:

sqlite>.dump file.sql

执行之后会生成file.sql文件,包含所有数据库表的结构和数据。

二、准备测试数据

创建测试数据库和数据表

CREATE TABLE COMPANY ( ID INT NOT NULL, NAME VARCHAR(20), AGE INT, ADDRESS VARCHAR(20), SALARY DECIMAL(7,2));

插入测试数据

INSERT INTO COMPANY ( SELECT 1, 'Paul', 32, 'California', 20000.0) UNION ALL

SELECT * FROM COMPANY;

创建临时表

CREATE TABLE t1 ( id INT, NAME VARCHAR(20));

插入t1表数据

INSERT INTO t1 ( SELECT 1, 'a' ) UNION ALL

INSERT INTO t1 ( SELECT 2, 'b') UNION ALL

插入最后一行数据

SELECT 3, 'c';

注意:当数据量较大时建议分批次插入。

三、开始备份操作(示例基于SQLite 3.6.2版本)

在低版本数据库上执行备份操作

sqlite> sqlite3.bak.3.6.2 tim

SQLite版本信息会在打开数据库时显示。

进入命令行模式

sqlite> .headers on

sqlite> .mode columns

sqlite> .output alltables.sql

执行.dump命令导出数据

sqlite>.dump

备份完成后会生成alltables.sql文件。

四、查看生成的备份文件

sqlite> more alltables.sql

查看生成的SQL脚本内容

文件内容包括数据的全量备份,包括

- 数据表结构定义(CREATE TABLE)

- 数据记录(INSERT INTO)

- 数据更新( inserted),并支持UNION操作。

备份文件看起来像以下示例:

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

CREATE TABLE "COMPANY_TMP"...

...多行插入语句...

COMMIT;

五、在高版本3.8.6上面恢复数据

首先在目标数据库中创建与源数据库结构一致的表

DROP TABLE IF EXISTS COMPANY;

CREATE TABLE COMPANY ( ID INT NOT NULL, NAME VARCHAR(20), AGE INT, ADDRESS VARCHAR(20), SALARY DECIMAL(7,2), IPHONE VARCHAR(16) NOT NULL, LOGIN_DATE DATETIME);

恢复数据到新表

sqlite> INSERT INTO COMPANY</div>

SELECT ID, NAME, AGE, ADDRESS, SALARY FROM COMPANY_TMP

注意:如果新旧数据库字段定义不同需谨慎处理。建议先核对字段结构。

例如,对于新增字段IPHONE和LOGIN_DATE

INSERT INTO COMPANY ( ID, NAME, AGE, ADDRESS, SALARY, IPHONE) SELECT ID, NAME, AGE, ADDRESS, SALARY FROM COMPANY_TMP;

六、删除旧的临时表

sqlite> DROP TABLE IF EXISTS COMPANY_TMP;

至此,数据库迁移工作完成。

转载地址:http://encsz.baihongyu.com/

你可能感兴趣的文章
(二)MyBatis学习笔记——使用映射配置文件进行CRUD、核心配置文件使用
查看>>
LeetCode 76. 最小覆盖子串
查看>>
架构 -- rsync补充02
查看>>
shell基础 - 03
查看>>
第七课时logback日志框架介绍及应用
查看>>
第十一课时通讯录列表前后端调用
查看>>
java注解完整实例
查看>>
6.4 jmeter基础知识--变量
查看>>
6.6 jmeter基础—系统日志
查看>>
10 测试脚本结果分析
查看>>
先验概率,后验概率,似然函数,贝叶斯公式
查看>>
python初学者容易犯的错误
查看>>
github资源下载assets中的各种格式
查看>>
ubuntu中添加截图和录屏快捷键
查看>>
基于libVLC的视频播放器之四:直接使用libVLC
查看>>
Qt5下OpenGL程序的新写法
查看>>
FFmpeg:‘UINT64_C‘ was not declared in ths scope
查看>>
Qt在pro中管理多个子项目(子工程)
查看>>
error LNK2019:无法解析的外部符号_imp_CryptAcquireContextA@20
查看>>
error LNK2001:无法解析的外部符号_imp_timeGetTime@0
查看>>