我正在讀SQL book和筆者使用SQLITE3,這是真棒,因爲沒有一個服務器與混亂。無論如何,作者在書中說,要輸入sqlite3 -echo something.db < some.sql
這個問題對於終端來說什麼都沒有迴應,甚至沒有從'<'重定向命令創建的數據庫。sqlite3的回聲和「<」管道命令無法正常運行
有誰知道是怎麼回事......這件事?
你的朋友,
user2085446
我正在讀SQL book和筆者使用SQLITE3,這是真棒,因爲沒有一個服務器與混亂。無論如何,作者在書中說,要輸入sqlite3 -echo something.db < some.sql
這個問題對於終端來說什麼都沒有迴應,甚至沒有從'<'重定向命令創建的數據庫。sqlite3的回聲和「<」管道命令無法正常運行
有誰知道是怎麼回事......這件事?
你的朋友,
user2085446
其實,你顯示命令是建立從SQL轉儲一個新的數據庫的正確方法。
能否請您出示的sql文件的內容(cat some.sql
)?我可以重現所描述的行爲的唯一方法是通過給sqlite提供一個空的sql文件。
試試這個命令,看看你是否能得到同樣的結果:
$ cat <<EOF > test.sql
> create table test1 (f1, f2, f3);
> insert into test1(f1, f2, f3) values ("foo", "bar", "baz");
> EOF
$ sqlite3 -echo test.db < test.sql
create table test1 (f1, f2, f3);
insert into test1(f1, f2, f3) values ("foo", "bar", "baz");
$ file test.db
test.db: SQLite 3.x database
something.db
是現有的數據庫。 < some.sql
表示它從該文件中選擇數據並將其寫入sqlite控制檯。所以這兩個文件都必須存在。
something.db
必須是一個有效的sqlite3升數據庫文件(或空或不存在的文件); some.sql
必須是包含您的命令的文本文件。
的-echo
PARAMS指定它必須執行之前打印的命令。
這讓我想起很多事情。感謝您的答覆。有沒有辦法創建一個空的數據庫.db文件,然後將現有的.sql文件加載到它?因爲如果我創建一個新的數據庫,我必須指定一個新的表和東西,或者當我退出sqlite3時它就會消失... – 2013-02-20 05:49:19
@user如果database.db存在,那麼some.sql中的查詢將只編輯它。 – n1xx1 2013-02-20 05:50:52
我需要爲database.db創建表來加載一個.sql文件到它嗎? – 2013-02-20 06:06:20
根據您的意見和你的終端屏幕截圖,我得到的印象是你的「some.sql」文件可能在錯誤的編碼和/或開始與BOM混淆sqlite。
可以使用file
命令查找出來,如果這是問題的使用iconv
,recode
或你喜歡的文本編輯器將文件轉換成你的終端預計,編碼,和正確的行結束符(\n
又名「LF 「在Linux中,\r\n
又名Windows中的」CRLF「)。
嗨。我可以將SQL轉儲爲.txt或其他東西,否則它看起來像瘋狂的字節碼。讓我在這一分鐘上工作。我現在也要試試你的bash-foo! :D – 2013-02-20 06:08:17
我能夠獲得相同的結果!太棒了。 – 2013-02-20 06:11:04
請找到我的SQL轉儲:'PRAGMA foreign_keys = OFF; BEGIN TRANSACTION; CREATE TABLE person(id整數主鍵,名字文本,姓氏文本,年齡整數); INSERT INTO「person」VALUES(0,'beta','bill',59); CREATE TABLE寵物(ID整數主鍵,名稱文本,品種文本,年齡整數,死亡整數); INSERT INTO「pet」VALUES(0,'t.rex','dinosaur',23,0); CREATE TABLE person_pet(person_id integer,pet_id integer); INSERT INTO「person_pet」VALUES(0,0); COMMIT;' – 2013-02-20 06:22:32