mysql — Выберите данные из таблицы БД 1 и вставьте их в другую таблицу БД 2 в Переполнение стека

У меня есть две разные базы данных, имена:

  1. dbtest: Таблица 1
  2. dbtest2: таблица 2

Я хочу выбрать все данные и новые записи от dbtest Table 1 до dbtest2 Table 2.

Я пробовал это

$sqlfin = "INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1";
$resultfi = mysqli_query($db_conn, $sqlfin);

Но пока не повезло. Как я могу гарантировать, что новые записи будут вставлены в обе таблицы? Любая помощь будет оценена?

8

Решение

давайте попробуем это в этом формате

INSERT INTO `dbtest2`.`Table2` SELECT * FROM `dbtest`.`Table1`

Для операторов INSERT … SELECT выполняются следующие условия:

  • Укажите IGNORE, чтобы игнорировать строки, которые могут привести к нарушениям дубликата ключа.
  • Столбцы AUTO_INCREMENT работают как обычно.
  • Чтобы гарантировать возможность использования двоичного журнала для повторного создания исходных таблиц, MySQL не разрешает одновременные вставки для INSERT … SELECT
    заявления (см. Раздел 8.11.3, «Параллельные вставки»).
  • Чтобы избежать неоднозначных проблем со ссылками на столбцы, когда SELECT и INSERT ссылаются на одну и ту же таблицу, предоставьте уникальный псевдоним для каждого
    таблица, используемая в части SELECT, и квалифицировать имена столбцов в этом
    расстаться с соответствующим псевдонимом.

INSERT … SELECT синтаксис


Создать триггер: для добавления новых записей

CREATE TRIGGER copy_record BEFORE INSERT ON dbtest.Table1
FOR EACH ROW
BEGIN
INSERT INTO dbtest2.Table2 (first_name, last_name) VALUES (new.first_name, new.last_name);
END

trigger_event указывает тип операции, которая активирует
спусковой крючок. Эти значения trigger_event разрешены:

INSERT: The trigger activates whenever a new row is inserted into the table; for example, through INSERT, LOAD DATA, and REPLACE

заявления.

UPDATE: The trigger activates whenever a row is modified; for example, through UPDATE statements.

DELETE: The trigger activates whenever a row is deleted from the table; for example, through DELETE and REPLACE statements. DROP TABLE

и операторы TRUNCATE TABLE в таблице не активируют это
триггер, потому что они не используют DELETE. Удаление раздела не
активируйте триггеры DELETE, либо.

CREATE TRIGGER Синтаксис

6

Другие решения

Попробуйте этот запрос для желаемой задачи:

Сначала запрос (Создать таблицу точно так же, как в старой базе данных, если у вас нет):

CREATE TABLE dbtest2.Table2 LIKE dbtest.Table1;

Второй запрос (Вставьте все данные во вновь созданную таблицу) :

INSERT INTO dbtest2.Table2 SELECT * FROM dbtest.Table1;
1

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

INSERT INTO dbtest2.Table2 (2_col_1, 2_col_2) SELECT 1_col_1, 1_col_2 FROM dbtest.Table1

С PDO (своего рода альтернативный ответ, я не знаю много для Mysqli):
Вы можете подключиться к Mysql с PDO без указания имени базы данных при работе с несколькими (но это не обязательно), лайк:

$db = new PDO( "mysql:host=" . $host . ";", $user, $password, $options );

Затем напишите имена базы данных, таблицы и столбцы, как при создании JOIN (как вы сделали): разделены .

// an example ..
$useDb = $db->query("INSERT INTO db_1.table1 (value_1, value_2) SELECT value_3, value_4 FROM db_2.table2 WHERE db_2.table2.id = 5");

(пример проверен и работает нормально)

1

INSERT INTO dbtest2 (
id,
name,
status )
SELECT id,
name,
'1'
FROM dbtest
ORDER BY id ASC

Вы можете использовать INSERT … SELECT синтаксис. Обратите внимание, что вы можете указать ‘1’ непосредственно в части SELECT.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector