Скопировать данные таблицы из одной базы данных в другую базу данных SQL - PullRequest
0 голосов
/ 09 марта 2019

Я смотрел на подобные проблемы, однако ни один из ответов не помог в моем случае.

Просто немного фона.У меня есть две базы данных, обе имеют одну и ту же таблицу с одинаковыми полями и структурой.Данные уже существуют в обеих таблицах.Я хочу перезаписать и добавить данные в db1.table из db2.table, основной идентификатор вызывает проблему с обновлением.

Когда я использую запрос:

USE db1;
INSERT INTO db2.table(field_id,field1,field2)
SELECT table.field_id,table.field1,table.field2
FROM table;

Этоработает с пустой таблицей, потому что ни один из первичных ключей не существует.Как только первичный ключ существует, он выходит из строя.

Было бы мне проще переписать первичные ключи?или найти первичный ключ и обновить поля, связанные с field_id?Я действительно не уверен, как идти дальше отсюда.Данные необходимо переносить каждые 5 минут, поэтому, возможно, требуется хранимая процедура?

Ответы [ 5 ]

0 голосов
/ 10 марта 2019
INSERT INTO database1.tabledata SELECT * FROM database2.tabledata;

Но вы должны сохранить длину varchar больше или равной database2 и сохранить то же имя столбца

0 голосов
/ 10 марта 2019

сначала вы должны попытаться добавить новые записи, а затем обновить все записи. Вы можете создать процедуру, как показано ниже: код

PROCEDURE sync_Data(a IN NUMBER ) IS
  BEGIN

   insert into db2.table
     select *
       from db1.table t
         where t.field_id not in (select tt.field_id from db2.table tt);

     begin
       for t in (select * from   db1.table) loop
        update db2.table aa
         set aa.field1  = t.field1,
           aa.field2     = t.field2 
     where aa.field_id = t.field_id;
  end loop;
 end;

END sync_Data
0 голосов
/ 09 марта 2019

Я просто удалил данные из новой базы данных и отправил их снова.

DELETE FROM db2.table WHERE db2.table.field_id != 0;
USE db1;
INSERT INTO db2.table(field_id,field1,field2)
SELECT table.field_id,table.field1,table.field2
FROM table;

Это не очень эффективно, но выполняет свою работу. Я не мог понять синтаксис, чтобы правильно выполнить ОБНОВЛЕНИЕ или изменить поле IsIdentity в MariaDB, поэтому я не уверен, сработают они или нет.

0 голосов
/ 09 марта 2019

Затраты на удаление и замену нетривиальных объемов данных для всей таблицы будут чрезмерно высокими. Тем не менее, я бы предпочел обновить на месте (объединить), чем удалить /replace.

USE db1;
INSERT INTO db2.table(field_id,field1,field2)
SELECT t.field_id,t.field1,t.field2
FROM table t
ON DUPLICATE KEY UPDATE field1 = t.field1, field2 = t.field2

Это можно использовать внутри процедуры и вызывать каждые 5 минут (не рекомендуется), или вы можете создать триггер, который срабатывает при выполнении INSERT и UPDATE для синхронизации таблиц.

0 голосов
/ 09 марта 2019

Установить IsIdentity в Нет в Спецификация идентификации в таблице, в которую вы хотите переместить данныеи после выполнения сценария установите для него значение Да снова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...