2015-08-25 83 views
0

我想使用建議here的方法將olddb.sqlite3中的表複製到newdb.sqlite3中。爲什麼UNIQUE約束在這個INSERT上失敗?

bash-3.2$ cat cp.sql 
ATTACH "olddb.sqlite3" AS old; 
INSERT INTO feedback_phone SELECT * FROM old.feedback_phone; 
bash-3.2$ rm newdb.sqlite3 
bash-3.2$ touch newdb.sqlite3 
bash-3.2$ sqlite3 newdb.sqlite3 < cp.sql 
Error: near line 3: UNIQUE constraint failed: feedback_phone.id_ 

這是爲什麼發生?我知道ID_列由獨特的整數:

bash-3.2$ sqlite3 olddb.sqlite3 
SQLite version 3.8.5 2014-08-15 22:37:57 
Enter ".help" for usage hints. 
sqlite> .schema feedback_phone 
CREATE TABLE feedback_phone (
     id_ INTEGER NOT NULL, 
     phone VARCHAR, 
     language VARCHAR, 
     kind VARCHAR, 
     user VARCHAR, 
     timestamp DATETIME, 
     success BOOLEAN, 
     url VARCHAR, 
     PRIMARY KEY (id_), 
     CHECK (success IN (0, 1)) 
); 
sqlite> select id_ from feedback_phone; 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 

我複製該表從一個數據庫到不同的數據庫,完全是空的。究竟是什麼違反了約束?

回答

3

新的數據庫文件是空的,所以它甚至沒有該表。 因此,feedback_phone指的是具有該名稱的唯一表格,即old.feedback_phone

將CREATE TABLE語句添加到.sql文件。

相關問題