Database-Design

複製一個保留自定義_id的sqlite3表

  • May 12, 2020

我正在嘗試複製一個表,其_id欄位由具有一些間隙的整數給出,例如 1,2,5,7,可能是由於已刪除的消息。(這是我正在操作的 Whatsapp 數據庫的玩具模型。)

我想複製保留標籤 1、2、5、7 的表格,而不是AUTOINCREMENT下面給出的 1、2、3、4。

正確的方法是什麼?

CREATE TABLE messages (_id INTEGER PRIMARY KEY AUTOINCREMENT, key_remote_jid TEXT NOT NULL);
ATTACH 'msgstoreF.db' AS android;
INSERT INTO messages (key_remote_jid)
   SELECT key_remote_jid
   FROM android.messages;

我可以通過

CREATE TABLE messages (_id INTEGER PRIMARY KEY, key_remote_jid TEXT NOT NULL);
ATTACH 'msgstoreF.db' AS android;
INSERT INTO messages (_id, key_remote_jid)
   SELECT _id, key_remote_jid
   FROM android.messages;

但是這樣的表不包含在sqlite_sequence.

只需將 ID 值複製到:

CREATE TABLE messages (_id INTEGER PRIMARY KEY AUTOINCREMENT, key_remote_jid TEXT NOT NULL);
ATTACH 'msgstoreF.db' AS android;
INSERT INTO messages (_id, key_remote_jid)
   SELECT _id, key_remote_jid
   FROM android.messages;

請閱讀SQLite 自動增量文件。新的 ID 值不會與手動插入的值衝突。(您可能不需要指定 AUTOINCREMENT 關鍵字。)

引用自:https://dba.stackexchange.com/questions/266859