Как я могу добавить информацию в несколько таблиц одновременно, имея соответствующие ключи? - PullRequest
0 голосов
/ 15 октября 2018

Я хочу создать новые учетные записи пользователей в своем веб-приложении, одновременно вставляя данные в несколько таблиц в mysql.Например, у меня может быть таблица для общей пользовательской информации, такой как аутентификация, в то время как у меня может быть другая таблица, которая может иметь биографическую информацию для этого пользователя.Внешний ключ в столбце биографии должен соответствовать первичному ключу таблицы аутентификации.

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

В другом примере у меня есть таблица со списком ресторанов под названием 'Dining_listings'.В одной из этих строк есть список «All Foods Cuisine».У меня может быть отдельная таблица с именем location_dining_types, в которой перечислены все типы блюд, которые могут соответствовать этому ресторану, с внешним ключом, соответствующим первичному ключу этого ресторана.В таблице 'locatiom_dining_types' может быть несколько строк.

Кроме того, я хочу создать уникальный первичный ключ из различных символов для каждого пользователя.Вместо стандартного первичного ключа auto_incrememt, который по умолчанию начинается с 1 и увеличивается, я хотел бы сгенерировать уникальный ключ из случайных символов, например fh4jnx68g4.

1 Ответ

0 голосов
/ 15 октября 2018

Вам нужно LAST_INSERT_ID()

Попробуйте что-то вроде этого:

 INSERT INTO user (given, surname) VALUES ('Michael', 'Widenius');
 SET @userId =: LAST_INSERT_ID();
 INSERT INTO company(user_id, name) VALUES (@userId, 'MySQL AB');
 INSERT INTO company(user_id, name) VALUES (@userId, 'MariaDB Corporation AB');

LAST_INSERT_ID дает вам значение идентификатора автоинкремента из, ну, с последней вставки.Затем вы сохраняете его в пользовательской переменной, а затем используете его для заполнения значений FK в других таблицах.

Это безопасно, даже если у вас много программ, выполняющих вставки, поскольку значение LAST_INSERT_ID поддерживается для каждого соединения с базой данных.

Если вы хотите сгенерировать значение самостоятельно, вы можете сделать это.

 SET @userId = SELECT <<<random string>> 
 INSERT INTO user (user_id, given, surname) VALUES (@userId, 'Michael', 'Widenius');
 INSERT INTO company(user_id, name) VALUES (@userId, 'MySQL AB');
 INSERT INTO company(user_id, name) VALUES (@userId, 'MariaDB Corporation AB');

Вы хотите знать, как генерировать случайную строку в языке запросов MySQL?Смотри сюда. Генерация случайной и уникальной 8-символьной строки с использованием MySQL

Внимание: случайные строки в качестве первичных или внешних ключей труднее эффективно индексировать, чем целые числа с автоинкрементом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...