0

我正在使用 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”列时显示的数据。

然后我进行了几次测试才发现:

  1. “插入或替换到 T1 SELECT * FROM T2;” 在 SQLITE 命令行中执行时工作正常。
  2. 仅当目标表具有一个主键时才会发生。也就是说,具有两个或多个主键的表可以正常工作。
  3. “INSERT OR IGNORE”也未能插入主键值。
  4. 更改列的顺序没有帮助。
  5. 添加列名没有帮助:“INSERT OR REPLACE INTO T1 (id,theData) SELECT id,theData FROM T2”结果相同。

我试图通过互联网找到答案,但失败了。有任何想法吗?

4

0 回答 0