【发布时间】:2016-06-16 20:52:09
【问题描述】:
我有以下 db 文件 (DB1.db) 只包含一个表:
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE CARS (ID INT KEY NOT NULL, COMPANY CHAR(20) NOT NULL, COLOR CHAR(10) NOT NULL);
INSERT INTO "CARS" VALUES(111,'Hyundai','White');
INSERT INTO "CARS" VALUES(222,'BMW','Black');
INSERT INTO "CARS" VALUES(333,'Toyota','Blue');
COMMIT;
为了连接两个不同数据库中的两个表,我将 DB1.db(和另一个 db)附加到 DB2.db:
sqlite> ATTACH DATABASE 'DB1.db' AS 'db1' ;
“CARS”表信息如下所示:
sqlite> PRAGMA TABLE_INFO(CARS);
0|ID|INT KEY|1||0
1|COMPANY|CHAR(20)|1||0
2|COLOR|CHAR(10)|1||0
接下来也是最后,我想对附加的表运行查询并将结果保存在 DB2.db 的新表中:
sqlite> CREATE TABLE RES1 AS SELECT ID,COMPANY FROM CARS WHERE ID='333';
正如我所料,结果在一个新表中:
sqlite> SELECT * FROM RES1 ;
333|Toyota
但是新的表格信息看起来像:
sqlite> PRAGMA TABLE_INFO(RES1);
0|ID|INT|0||0
1|COMPANY|TEXT|0||0
如您所见,我丢失了 'COMPANY' 列类型 - 它不再是 'CHAR(20)' 并且该列可能是空的('NOT NULL' 是 0 而不是像以前那样的 1)。
我的问题: 如何进行上述操作(将结果附加并查询到新表中)并且仍然不丢失原始表信息?
【问题讨论】:
标签: c database sqlite database-schema