PHP/MySQL: перемещение данных из старой базы данных (таблицы без идентификатора) в новую базу данных (таблицы с идентификатором)

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

Старая БД:

+-----------------------------------+------------+--------+
|               Col1                |    Col2    | NumCol |
+-----------------------------------+------------+--------+
| Value 1                           | Value 2    |    123 |
| This is a row with only one cell  |            |        |
| This row is testing html entities | Te<br />st |     45 |
+-----------------------------------+------------+--------+

Новая БД:

+----+-----------------------------------+------------+--------+
| ID |               Col1                |    Col2    | NumCol |
+----+-----------------------------------+------------+--------+
|  1 | Value 1                           | Value 2    |    123 |
|  2 | This is a row with only one cell  |            |        |
|  3 | This row is testing html entities | Te<br />st |     45 |
+----+-----------------------------------+------------+--------+

Итак, как видите, все осталось прежним, за исключением нового идентификатора столбца в каждой таблице.

Вот моя функция, чтобы скопировать все из моей старой БД в мою новую БД:

public function loadOldDBtoNewDB($oldDB,$newDB){
    $sqlshowTables = "SHOW TABLES ";
    $statement = $this->db->prepare($sqlshowTables);
    $statement->execute();
    $tables = $statement->fetchAll(PDO::FETCH_NUM);

    foreach($tables as $table){
        $sql[] = "INSERT INTO ".$newDB.".`".$table[0]."` SELECT * FROM ".$oldDB.".`".$table[0]."`; ";
    }

    $sqlState = implode(' ', $sql);
    $executeStatement = $this->db->exec($sqlState);

}

Примечание: Старая БД и новая БД уже существуют, когда я запускаю эту функцию.

Итак, как мне изменить оператор вставки, чтобы столбец идентификатора (автоинкремент) добавлялся при каждой вставке?

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваша новая таблица уже должна иметь AUTO_INCREMENT в столбце id. Затем укажите значение NULL при выборе!

Если в вашей новой таблице не установлен автоинкремент для столбца ID, добавьте его,

ALTER TABLE `mytablename` 
CHANGE `ID` `ID` INT(11) NOT NULL AUTO_INCREMENT 

Добавьте NULL перед * в вашем SELECT - это заставит ID (который появляется первым в вашем списке столбцов) использовать AUTO_INCREMENT, поскольку это не может быть NULL.

$sql[] = "INSERT INTO ".$newDB.".`".$table[0]."` SELECT NULL, * FROM ".$oldDB.".`".$table[0]."`; ";

спасибо, что указали мне правильное направление. Ваш ответ правильный, и я отмечу его как принятый ответ. Спасибо!

Christoph C. 22.05.2019 16:09

вы также можете создать новую таблицу с помощью следующей команды

create table new_table as (select * from old_table);

alter table new_table add column id primary key auto_increment;

спасибо, ваш ответ тоже правильный. @Qirel был быстрее, поэтому я отмечу его ответ как принятый ответ.

Christoph C. 22.05.2019 16:10

Другие вопросы по теме