SQLite データベースでいくつかのデータ更新を処理するためにフラッシュ ビルダーを使用しています。
T1 と T2 という名前の異なる 2 つの同一のテーブルを作成しました。
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コマンドラインで実行すると正常に動作します。
- ターゲット テーブルに 1 つの主キーがある場合にのみ発生します。つまり、2 つ以上の主キーを持つテーブルは正常に機能しました。
- 「INSERT OR IGNORE」も主キー値の挿入に失敗しました。
- 列の順序を変更しても役に立ちませんでした。
- 列名を追加しても役に立たなかった: "INSERT OR REPLACE INTO T1 (id,theData) SELECT id,theData FROM T2" 結果は同じです。
インターネットで答えを見つけようとしましたが、失敗しました。何か案は?