[Sqlite]-->数据迁移备份--从低版本3.6.2到高版本3.8.6

前端之家收集整理的这篇文章主要介绍了[Sqlite]-->数据迁移备份--从低版本3.6.2到高版本3.8.6前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

引子:

1,Sqlite在Windows、Linux 和 Mac OS X 上的安装过程

2,@L_502_1@

3,嵌入式数据库事务理解以及实例操作

数据迁移

一,使用.dump命令

命令帮助提示

.dump ?TABLE? ... Dump the database in an sql text format

If TABLE specified,only dump tables matching

LIKE pattern TABLE.

理解分析:
使用
.dump命令可以将数据库对象导出成sql格式。不带任何参数时,.dump将整个数据库导出为数据库定义语言(DDL)数据库操作语言(DML)命令,适合重新创建数据库对象和其中的数据。如果提供了参数,Shell将参数解析作为表名或视图,导出任何匹配给定参数的表或视图,那些不匹配的将被忽略。

默认情况下.dump命令的输出定向到屏幕。如:.dump

如果要将输出重定向文件,请使用.dump[filename]命令,此命令将所有的输出重定向到指定的文件中。若要恢复到屏幕的输出,只需要执行.output stdout命令就OK了。

sqlite>.output file.sql

sqlite>.dump

sqlite>.output stdout

注:如果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 2,'Allen',25,'Texas',15000.0 UNION ALL

SELECT 3,'Teddy',23,'Norway',helvetica; line-height: 18px; text-indent: 2cm;">SELECT 4,'Mark','Rich-Mond',65000.0 UNION ALL

SELECT 5,'David',27,85000.0 UNION ALL

SELECT 6,'Kim',22,'South-Hall',45000.0 UNION ALL

SELECT 7,'James',24,'Houston',10000.0 ;

SELECT * FROM COMPANY;

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

INSERT INTO t1 SELECT 1,'a' UNION ALL SELECT 2,'b' UNION ALL SELECT 3,'c';

将低版本的表修改表名为临时表COMPANY_TMP

ALTER TABLE COMPANY RENAME TO COMPANY_TMP;

三,开始备份操作,在低版本3.6.2上面做备份:

[root@name01 ~]# /usr/bin/sqlite3.bak.3.6.2 tim

sqlite version 3.6.20

Enter ".help" for instructions

Enter sql statements terminated with a ";"

sqlite>

sqlite> .headers on

sqlite> .mode columns

sqlite> .output alltables.sql

sqlite>.dump

sqlite>.exit

四,查看生成的备份文件

[root@name01 ~]# more alltables.sql

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

CREATE TABLE "COMPANY_TMP"(ID INT NOT NULL,helvetica; line-height: 18px; text-indent: 2cm;">INSERT INTO "COMPANY_TMP" VALUES(1,20000);

INSERT INTO "COMPANY_TMP" VALUES(2,15000);

INSERT INTO "COMPANY_TMP" VALUES(3,helvetica; line-height: 18px; text-indent: 2cm;">INSERT INTO "COMPANY_TMP" VALUES(4,65000);

INSERT INTO "COMPANY_TMP" VALUES(5,85000);

INSERT INTO "COMPANY_TMP" VALUES(6,45000);

INSERT INTO "COMPANY_TMP" VALUES(7,10000);

INSERT INTO "t1" VALUES(1,'a');

INSERT INTO "t1" VALUES(2,'b');

INSERT INTO "t1" VALUES(3,'c');

COMMIT;

[root@name01 ~]#

看到都是一条条备份成的dml、ddl的sql语句。

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

1,在上面建立相同的COMPANY表,不过多添加2个字段IPHONELOGIN_DATE,如下所示:

DROP TABLE IF EXISTS COMPANY;

CREATE TABLE COMPANY(

ID INT NOT NULL,

NAME VARCHAR(20),helvetica; line-height: 18px; text-indent: 2cm;">AGE INT,helvetica; line-height: 18px; text-indent: 2cm;">ADDRESS VARCHAR(20),helvetica; line-height: 18px; text-indent: 2cm;">SALARY DECIMAL(7,2),helvetica; line-height: 18px; text-indent: 2cm;">IPHONE VARCHAR(16)

NOT NULL,LOGIN_DATE DATETIME

);

2,开始恢复入原来备份的数据sql脚本

[root@name01 ~]# sqlite3 ti

sqlite VERSION 3.8.6 2014-08-15 11:46:33

Enter ".help" FOR USAGE hints.

sqlite> .headers ON

sqlite> .MODE COLUMNS

sqlite> .READ alltables.sql

sqlite> .TABLE

COMPANY COMPANY_TMP t1

sqlite>


3,在数据迁移从旧临时表迁移到新表之前,查下现有表的数据

sqlite>SELECT * FROM COMPANY;

ID NAME AGE ADDRESS SALARY IPHONE LOGIN_DATE

---------- ---------- ---------- ---------- ---------- ----------- -------------------

1 Paul 32 California 20000 14782121412 2014-08-29 11:14:07

2 Allen 25 Texas 15000 13982121412 2014-08-29 11:14:07

4,开始使用INSERT迁移数据到新添加字段的表COMPANY

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

sqlite> SELECT * FROM COMPANY;

1 Paul 32 California 20000

2 Allen 25 Texas 15000

3 Teddy 23 Norway 20000

4 Mark 25 Rich-Mond 65000

5 David 27 Texas 85000

6 Kim 22 South-Hall 45000

7 James 24 Houston 10000

看到迁移数据之后的显示,旧表数据已经迁移到新表了。

六,最后删除旧的临时表

sqlite> DROP TABLE IF EXISTS COMPANY_TMP;

至此,整个数据迁移工作顺利结束。

猜你在找的Sqlite相关文章