我正在使用 flash builder 来处理 SQLite 数据库中的一些数据更新。
我创建了两个名称不同的相同表:T1 和 T2。
CREATE TABLE T1
(
id int NOT NULL,
theData text,
PRIMARY KEY(id)
);
CREATE TABLE T2
(
id int NOT NULL,
theData text,
PRIMARY KEY(id)
);
我还把一些测试数据放到了T2中。
INSERT INTO T2 (id,theData) VALUES (1,'THEDATA-AA');
INSERT INTO T2 (id,theData) VALUES (2,'THEDATA-BB');
INSERT INTO T2 (id,theData) VALUES (3,'THEDATA-CC');
INSERT INTO T2 (id,theData) VALUES (4,'THEDATA-DD');
在 sqlite 命令行中的“SELECT * FROM T2”以确认插入。
1|THEDATA-AA
2|THEDATA-BB
3|THEDATA-CC
4|THEDATA-DD
然后,在我的 flex 桌面项目中执行如下 sql 语句:
INSERT OR REPLACE INTO T1 SELECT * FROM T2;
然后我尝试在sqlite命令行环境中查看数据:
sqlite> select * from t1;
|THEDATA-AA
|THEDATA-BB
|THEDATA-CC
|THEDATA-DD
第一列(id)的数据在哪里?注意:id 不仅设置为 PK,还设置为 NOT NULL。
sqlite> select id from t1;
sqlite>
没有记录?!
sqlite> select thedata from t1;
THEDATA-AA
THEDATA-BB
THEDATA-CC
THEDATA-DD
sqlite>
选择“theData”列时显示的数据。
然后我进行了几次测试才发现:
- “插入或替换到 T1 SELECT * FROM T2;” 在 SQLITE 命令行中执行时工作正常。
- 仅当目标表具有一个主键时才会发生。也就是说,具有两个或多个主键的表可以正常工作。
- “INSERT OR IGNORE”也未能插入主键值。
- 更改列的顺序没有帮助。
- 添加列名没有帮助:“INSERT OR REPLACE INTO T1 (id,theData) SELECT id,theData FROM T2”结果相同。
我试图通过互联网找到答案,但失败了。有任何想法吗?