Конфликт первичных ключей при объединении баз данных (автоматическое увеличение)

#sql #database #sqlite #sql-insert

#sql #База данных #sqlite #sql-вставка

Вопрос:

У меня есть две базы данных SQLite, которые я хотел бы объединить. Я делаю это с помощью следующих команд:

 ATTACH "c:other.db" AS SecondaryDB
INSERT INTO MyTable SELECT * FROM SecondaryDB.MyTable
  

Проблема в том, что MyTable имеет первичный столбец id , который автоматически увеличивается в обеих базах данных. Таким образом, возникает конфликт первичного ключа.

Как я могу вставить строки из вторичной базы данных таким образом, чтобы для id столбца использовалось автоматическое увеличение, начиная с последнего значения первой базы данных?

Ответ №1:

Вы хотите скопировать все строки из источника, но без автоматически увеличиваемого столбца.

Просто перечислите столбцы в предложениях insert и select — все, ожидаемый столбец первичного ключа. SQLite автоматически присвоит новые значения автоматически увеличиваемому столбцу.

Скажите, что столбцы вашей таблицы id, col1, col2, col3 , вы бы сделали:

 ATTACH "c:other.db" AS SecondaryDB
INSERT INTO MyTable(col1, col2, col3) 
SELECT col1, col2, col3 FROM SecondaryDB.MyTable