1. 程式人生 > >[Sqlite]-->資料遷移備份--從低版本3.6.2到高版本3.8.6

[Sqlite]-->資料遷移備份--從低版本3.6.2到高版本3.8.6

引子:

資料遷移

一,使用.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'      ,20000.0 UNION ALL

SELECT 4,           'Mark',        25,          'Rich-Mond'   ,65000.0 UNION ALL

SELECT 5,           'David',       27,          'Texas'       ,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上面做備份:

[[email protected] ~]# /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

四,檢視生成的備份檔案:

[[email protected] ~]# more alltables.sql

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

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

INSERT INTO "COMPANY_TMP" VALUES(1,'Paul',32,'California',20000);

INSERT INTO "COMPANY_TMP" VALUES(2,'Allen',25,'Texas',15000);

INSERT INTO "COMPANY_TMP" VALUES(3,'Teddy',23,'Norway',20000);

INSERT INTO "COMPANY_TMP" VALUES(4,'Mark',25,'Rich-Mond',65000);

INSERT INTO "COMPANY_TMP" VALUES(5,'David',27,'Texas',85000);

INSERT INTO "COMPANY_TMP" VALUES(6,'Kim',22,'South-Hall',45000);

INSERT INTO "COMPANY_TMP" VALUES(7,'James',24,'Houston',10000);

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

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

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

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

COMMIT;

[[email protected] ~]#

看到都是一條條備份成的dml、ddl的sql語句。

五,在高版本3.8.6上面恢復資料

1,在3.8.6上面建立相同的COMPANY表,不過多添加了2個欄位IPHONELOGIN_DATE,如下所示:

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

);

INSERT INTO COMPANY

SELECT 1,           'Paul',        32,          'California'  ,20000.0,'14782121412',DATETIME('NOW') UNION ALL

SELECT 2,           'Allen',       25,          'Texas'       ,15000.0,'13982121412',DATETIME('NOW') ;

SELECT * FROM COMPANY;

2, 開始恢復入原來備份的資料sql指令碼

[[email protected] ~]# 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

sqlite>

 4,開始使用INSERT遷移資料到新新增欄位的表COMPANY

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

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

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>

看到遷移資料之後的顯示,舊錶資料已經遷移到新表了。

六,最後刪除舊的臨時表

sqlite> DROP TABLE IF EXISTS COMPANY_TMP;

sqlite>

至此,整個資料遷移工作順利結束。

相關推薦

[Sqlite]-->資料遷移備份--版本3.6.2版本3.8.6

引子:資料遷移一,使用.dump命令命令幫助提示.dump ?TABLE? ...      Dump the database in an SQL text format                         If TABLE specified, only du

SqlServer版本資料庫附加Sql版本資料庫或備份檔案

       SqlServer低版本資料庫不能直接還原或附加Sql高版本資料庫或備份檔案,我們常用DTS互導的方式,如果不同版本資料庫不可訪問,可以使用高版本資料庫的DTS匯出整個庫的相應低版本建庫指令碼與資料,然後放在低版本資料庫中去執行,常見如

Java實現簡單的資料遷移單庫單表到單庫單表(2

這個文章是對我上一篇文章Java實現簡單的資料遷移,從單庫單表到單庫單表的簡單擴充套件因為我上一篇文章那種方法只能把資料進行簡單的遷移,但是這裡我需要對資料庫的內容進行重新的編排,所以很顯然,我上一篇文章的寫法是沒法完成我的需求的。 重申一下需求: 從一張資料表

macbook安裝版本的jdk,提示“Oracle 的 Java 要求 Mac OS X 10.7.3 或更版本

前言:因為工作原因需要安裝低版本的jdk7,下載了安裝包以後提示如下圖: 這是由於蘋果公司的過,在安裝包裡面加入了版本檢測的程式碼,所以電腦版本過高無法安裝,解決辦法就是就安裝包pkg解壓以後修改裡面的判斷版本的程式碼,然後在打包安裝就可以了。 過程如下: 1

版本cad如何開啟版本圖紙?不用升級軟體也可以搞定

有朋友提問:低版本cad如何開啟高版本圖紙?遇上這種情況的朋友,一般都會陷入兩難境地。想要安裝一個最新版的cad軟體吧,既費時又麻煩,不這麼解決又打不開圖紙,真的很煩惱。 其實你只要轉換一下思維方式,這個問題處理起來並不難,你缺的只是一個實用的cad轉換工具而已。而且不同的情況,解決方法也會有所

資料學習環境搭建(CentOS6.9+Hadoop2.7.3+Hive1.2.1+Hbase1.3.1+Spark2.1.1)

node1192.168.1.11node2192.168.1.12node3192.168.1.13備註NameNodeHadoopYY高可用DateNode YYYResourceManager YY高可用NodeManagerYYYJournalNodes YYY奇數個,至少3個節點ZKFC(DFSZK

二維碼資料 目錄 1. 二維碼QR Code 1 2. 發展歷程 1 3. 特點 2 4. 儲存 3 5. 分類 3 5.1.1. 按原理分 3 6. 區別 與條碼區別 5 7. 什麼是碼制?

二維碼資料     目錄 1. 二維碼QR Code 1 2. 發展歷程 1 3. 特點 2 4. 儲存 3 5. 分類 3 5.1.1. 按原理分 3 6. 區別   與條碼區別 5 7. 什麼是碼制?Q

快速解決版本Xcode不支援版本的iOS真機除錯問題

剛升級的iOS11.0,Xcode執行出現這個錯誤: This iPhone 6s Plus is running iOS 11.0 (15A5278f), which may not be sup

mac x Yosemide(10.10) 下安裝 jdk 1.7 (jdk 1.8) 要求Mac OS X10.7.3或更版本解決

OS X上的Java版本還是1.6的,而且似乎蘋果不再提供“蘋果版本的”Java更新,所以只好自己去更新了。第一個問題是去找OS X下的Java安裝檔案。Google一下“Java Mac OS”,返回的搜尋結果中的第一個網址實際上是JRE的下載介面。安裝完成之後,會跳到

Android Studio 版本Gradle升級到版本時常見問題

今天拿到一個用低版本Gradle的編譯的Android工程,gradle對版本的向下相容做的不太好,因此在高版本Gradle的電腦上會出很多問題。 1. Error:The project is using an unsupported version of the And

版本JDk不支援版本打包的異常:Unsupported major.minor version 52.0

異常記錄: stanford parser和jdk版本對應關係 J2SE 8 = 52, J2SE 7 = 51, J2SE 6.0 = 50, J2SE 5.0 = 49, JDK 1.4 = 48, JDK 1.3 = 47, JDK 1.2 = 46, JDK 1.1 =

sql版本檔案附加到版本附加失敗

1、先確定資料庫是否能連線,不能連線檢查sql服務是否啟動2、在附加過程中出現點選複製到任意檔案顯示標題: Microsoft SQL Server Management Studio------------------------------附加資料庫時出錯。有關詳細資訊,

Delphi版本原始碼移植到版本可能遇到的警告資訊解決方法

先前公司的一個專案因開發時間與專案定位導致結構失衡。在經過前段日子的評估與調查後,從今天開始進行重構。   也想趁這個機會,將介面的開發由Delphi 6轉向Delphi 2009。從而逐步放棄Delphi 6這個用了近7年的開發工具。也知道在轉移的過程中會碰到許多問

解決版本Xcode不支援版本iOS真機除錯問題

Xcode開發在進行真機除錯的時候,遇到了以下問題用Xcode8想真機編譯iOS11,彈出提示框This iPhone ... is running iOS 11.1.2 (11D257), which may not be supported by this version

小技巧,使用版本的VS開啟版本的解決方案(使用VS2008開啟VS2010的解決方案--同樣適用於其他版本

看後,我突發靈感,將該工程的解決方案檔案的字尾由xxx.sln改成了xxx.txt然後,檢視其內容如下: Microsoft Visual Studio Solution File, Format Version 11.00# Visual Studio 2010 Project("{FAE04EC0-301

版本MonoDevelop轉移到版本MonoDevelop的Editor問題

轉載自:http://blog.csdn.net/egostudio/article/details/50970552 升級完unity5.2.3,用MonoDevelop開啟程式碼發現編輯不了,複製貼上都不行,氣死人了!如下圖 後來找到原因是因為這個專案已經有

6.1 壓縮打包介紹;6.2 gzip壓縮工具;6.3 bzip2壓縮工具;6.4 xz壓縮工具

font family -s 格式 資源 watermark 打包 tar.bz2 微軟雅黑 6.1 壓縮打包介紹常見的壓縮文件類型:Windows : .rar .zip .7zLinux : .zip .gz .bz2 .xz

CentOS7搭建ELK-6.2.4版本

java centos7 elkCentOS7搭建ELK-6.2.4版本ELK是ElasticSerach、Logstash、Kibana三款產品名稱的首字母集合,用於日誌的搜集和搜索,今天我們一起搭建和體驗基於ELK的日誌服務;環境規劃本次實戰需要兩臺電腦(或者vmware下的兩個虛擬機),操作系統都是Ce

linux下elasticsearch安裝6.2.4版本,最新版本

先安裝Java環境https://blog.csdn.net/wangleittt/article/details/80118109接著操作下面:安裝es(elasticsearch)後執行 ./elasticsearch 提示 root 不允許執行解決辦法因為安全問題ela

【機智】Android 微信6.2以上版本 轉移聊天記錄到ios,當前Wi-Fi環境複雜,無法傳輸 問題

問題描述 直接看解決方案,不想聽來龍去脈? 請點傳送門 買了個iPhone,想把以前Android上微信的聊天記錄轉移過來,於是乎,想到了幾個辦法: - 電腦備份,然後恢復到iPhone -