#mysql
#mysql
Вопрос:
У меня есть таблица SQL под названием members
| member_id | first_name | last_name | email | password | phone_number | country |
|-----------|------------|-----------|----------------------------|----------|--------------|---------|
| 1 | John | Doe | john.doe@rambo.vid | 123456 | 654789159 | en_US |
| 2 | Jules | Ferry | jules.ferry@politician.old | 456789 | | fr_FR |
Я хотел бы создать новую таблицу users
и переместить данные с user_id в качестве junture следующим образом :
Пользователи
| user_id | first_name | last_name | email | password |
|---------|------------|-----------|----------------------------|----------|
| 1 | John | Doe | john.doe@rambo.vid | 123456 |
| 2 | Jules | Ferry | jules.ferry@politician.old | 456789 |
Участники
| member_id | user_id | phone_number | country |
|-----------|---------|--------------|---------|
| 1 | 1 | 654789159 | en_US |
| 2 | 2 | | fr_FR |
Каков наилучший способ (более эффективное выполнение) в MySQL для изменения существующей базы данных?
Комментарии:
1. Вы смотрели на
INSERT INTO SELECT
? dev.mysql.com/doc/refman/8.0/en/insert-select.html2. Да, но мне нужно после выполнить цикл для каждой строки данных и получить user_id и сохранить user_id в таблице members. Я не знаю, есть ли более простой способ только в одном запросе.
3. Не уверен, зачем вам нужно выполнять цикл. Можете ли вы объяснить другой способ? Почему это не может быть 2 инструкции insert?
4. Откуда вы берете
user_id
? Это другая таблица? Вы можете присоединиться к ним, если это так. Вы можете запустить инструкцию Update после завершения вставки в таблицу users.
Ответ №1:
Вот о чем я думаю:
INSERT INTO users ( user_id, member_id, first_name, last_name, email, password)
SELECT <user_id>, -- Wherever this needs to come from or remove if its generated.
member_id, first_name, last_name, email, password
FROM members;
За которым следует:
UPDATE members m INNER JOIN users u
ON m.member_id = u.member_id
SET m.user_id = u.user_id
Я добавил поле member_id в таблицу users, которого у вас нет. Если у вас нет возможности сделать это, вы можете использовать другие идентификаторы для присоединения к таблице.
Комментарии:
1. Да, это кажется лучшим способом, но
user_id
естьauto_increment
и я хотел бы получить его для каждой записи строки, чтобы сохранить его вusers
таблице без добавленияmember_id
в эту таблицу. к сожалению, я думаю, мне понадобится php-код, чтобы выполнить цикл для разделения каждой строки записи.2. Нет. Вам не нужно выполнять цикл, пока вы можете сопоставлять исходные данные и новые данные. Несколько общих ключей, которые вы можете обновить, используя новую таблицу.