Как составить запрос на копирование таблицы MYSQL?

Добрый день, грубо говоря есть
DB1 (Table1,Table2)
DB2 (Table1,Table2)
где ID в DB1.Table1 и DB1.Table2 не повторяются, структура всех таблиц одинаковая, данные могут между собой переноситься. (Типичная ситуация, когда большой архив и маленькая таблица с рабочими данными)
Все на InnoDB.

Возникла необходимость скопировать данные из DB2 в DB1
INSERT INTO DB1.Table1 (`id`, `photo`, `name`)
      SELECT    ? , DB2.Table1.photo, DB2.Table1.name
      FROM DB2.TABLE1 WHERE ...


Внимание, вопрос:
1) Что ставить вместо "?" ?
2) Как правильно получить последний ID в двух таблицах и успеть записать данные, до записи другими потоками (т.е. Боремся с RC, ID в Table1 и Table2 не повторяются)?
  • Вопрос задан
  • 2821 просмотр
Пригласить эксперта
Ответы на вопрос 2
@Confl1kt
habrahabr.ru/post/56702
настройте репликацию
Ответ написан
tyzhnenko
@tyzhnenko
System Administrator, DevOps, QA Engineer
Если ID не пересекаются, то просто делайте INSERT INTO SELECT. Счетчик автоинкримента увеличиться сам и будет больше чем значение самого большого PK.

CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` datetime(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

insert into t1 values (null, now());
insert into t1 values (null, now());
insert into t1 values (null, now());
insert into t1 values (null, now());
insert into t1 values (null, now());
insert into t1 values (null, now());

show create table t1;
| t1    | CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` datetime(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 |

> insert into t1 values (25, now());

> show create table t1;
| t1    | CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` datetime(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 |
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы