SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.07.2014 22:17:23

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Слияние двух таблиц в MySQL

Привет всем!
Есть задача: нужно как-то сливать данные с одной таблицы (таб 1) в другую (таб 2) (структура таблиц идентичная). При этом нужно как-то сделать, чтобы при переносе данные которые будут вставляться в таблицу (таб 2) заменялись новыми данными - обновлялись. Таких таблиц, с которых данные будут переноситься в общую таблицу будет много.
Есть предположение использовать INSERT INTO pricedb SELECT * FROM  import_puID;
Может быть вы что-то свое предложите?
Спасибо.

Неактивен

 

#2 14.07.2014 01:08:44

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Слияние двух таблиц в MySQL

yuriy написал:

нужно как-то сделать, чтобы при переносе данные которые будут вставляться в таблицу (таб 2) заменялись новыми данными - обновлялись

Чем не подходит REPLACE?

Неактивен

 

#3 14.07.2014 22:50:46

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Re: Слияние двух таблиц в MySQL

Вы имеете ввиду использовать его в при обновлении таблицы
UPDATE tab SET name = REPLACE(name, ' old', 'new');?

Как же тогда получиться: если в таб.1, содержиться, к примеру, 1 000 000 записей, среди которых нужно обновить часть данных, данными таб.2. - насколько полное будет обновление?
Суть задума такова:
Есть общая таблица в которой находятся миллионы записей. И есть сотни небольших таблиц данные которых нужно сливать в общую таблицу, при этом нужно старые данные в общей таблице заменять новыми данными с других таблиц (тоисть постояно как-то обновлять общее хранилище поисковой таблицы - по ней будет производиться поиск).
Подскажите как можно такое реализовать?

Неактивен

 

#4 15.07.2014 09:18:32

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Слияние двух таблиц в MySQL

Нет, подразумевалось

REPLACE INTO pricedb SELECT * FROM  import_puID;

Неактивен

 

#5 15.07.2014 22:13:13

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Re: Слияние двух таблиц в MySQL

Не совсем подходит. Здесь происходит замена по ID ключу, если они совпадают тогда происходит замена, если нет добавляет дополнительную строку... у меня в общей табл. в которую должны сливаться данные с других таблиц нет первичного ключа по которому можно было бы совершать замену (это огромная таблица, по ней прозводиться поиск), посему такой вариант только будет добавлять новые строки не производя никакой замены.
Остается, наверное, только один способ:
1. перед вставкой строк удалить сроки из общей таблицы по внешнему ключу (fk - каждая запись относится к определенному пользователю).
2. затем делать вставки на основе запросов:
- INSERT INTO pricedb SELECT * FROM  import_puID1; (это таблицы с которых необходимо перезалить данные в общую табл.)
- INSERT INTO pricedb SELECT * FROM  import_puID2;
- INSERT INTO pricedb SELECT * FROM  import_puID3;
...
и т.д.
Думаю понятно описал задачу, и ее решение возможно подлежит вашему вниманию!

Неактивен

 

#6 17.07.2014 07:37:24

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Слияние двух таблиц в MySQL

yuriy, удалять, а потом вставлять - корректное решение. Но нужно проследить за тем, чтобы удаление не занимало слишком долго (таблица скорее всего будет заблокирована на время удаления). Возможно, следует удалять последовательными запросами записи, относящиеся к разным таблицам (если они чем-то отличаются).

Неактивен

 

#7 17.07.2014 23:30:00

yuriy
Завсегдатай
Зарегистрирован: 24.10.2010
Сообщений: 76

Re: Слияние двух таблиц в MySQL

rgbeast написал:

yuriy, удалять, а потом вставлять - корректное решение. Но нужно проследить за тем, чтобы удаление не занимало слишком долго (таблица скорее всего будет заблокирована на время удаления). Возможно, следует удалять последовательными запросами записи, относящиеся к разным таблицам (если они чем-то отличаются).

Вы имеете ввиду удалять записи частями? Для этого нужно написать скрипт (а может лучше хранимую процедуру або тригер) который будет заниматься удалением и вставкой данных в табл... тольк пока не знаю как это можно организовать...

Неактивен

 

#8 18.07.2014 02:53:33

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Слияние двух таблиц в MySQL

Триггер не может удалять данные из той таблицы, к которой он относится.
Процедуру неудобно писать, и потом она ниоткуда не видна, если только про нее специально не помнить.
Лучше всего просто внешний (с точки зрения СУБД) запрос.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson