Я хочу скопировать строку из таблицы в базе данных в идентичную таблицу в другой базе данных. Для тестирования я создал это:
CREATE TABLE stuff (absid integer primary key, otherfield string );
и таблица 'stuff'
такие же, как указано выше в двух базах данных, testdb1
и testdb2
. Затем я помещаю две строки в 'stuff'
в testdb1
. Затем из командной строки я могу скопировать строку из одной базы данных в другую, таким образом:
prompt> sqlite3 testdb1
sqlite> attach database testdb2 as testdb2;
sqlite> insert into testdb2.stuff select * from stuff where absid=2;
sqlite> ^d
prompt>
Пока все хорошо. НО: вполне возможно, что в приложении, где я действительно хочу сделать это по-настоящему, будут ключевые столкновения. Например, если я использую приведенную выше последовательность для копирования строки обратно в testdb1
, я получу:
SQL error: PRIMARY KEY must be unique
Я хотел бы, чтобы при копировании строки автоматически выбирался новый уникальный абсид в случае конфликта. Есть ли способ, которым я могу указать это с более сложной select * ...
выше?
Полагаю, я могу обойти это, создав еще одну БД (скажем, в памяти) с идентичной таблицей, но без ограничения первичного ключа, и сделав копию за два шага (установив для absid значение null между), но Я бы предпочел более разумный способ, если он существует.