Что произойдет, если вы захотите создать много таких записей (зарегистрировать 10 пользователей, а не только одного)? Я нахожу следующее решение (всего 5 запросов):
Шаг I: Создать временную таблицу для хранения новых данных.
CREATE TEMPORARY TABLE tmp (id bigint(20) NOT NULL, ...)...;
Затем заполните эту таблицу значениями.
INSERT INTO tmp (username, password, bio, homepage) VALUES $ALL_VAL
Здесь вместо $ALL_VAL
вас разместите список значений: ('test1', 'test1', 'bio1', 'home1'), ..., ('testn', 'testn', 'bion', 'homen')
Шаг II: Отправьте данные в таблицу «user».
INSERT IGNORE INTO users (username, password)
SELECT username, password FROM tmp;
Здесь можно использовать «IGNORE», если вы разрешаете некоторым пользователям уже находиться внутри. При желании вы можете использовать ОБНОВЛЕНИЕ, аналогичное шагу III, перед этим шагом, чтобы найти, какие пользователи уже находятся внутри (и отметить их в таблице tmp). Здесь мы предполагаем, что имя пользователя объявлено как PRIMARY
в таблице пользователей.
Шаг III: применить обновление, чтобы прочитать все идентификаторы пользователей от пользователей в таблицу tmp. ЭТО СУЩЕСТВЕННЫЙ ШАГ.
UPDATE tmp JOIN users ON tmp.username=users.username SET tmp.id=users.id
Шаг IV: создайте другую таблицу, используя чтение идентификатора для пользователей
INSERT INTO profiles (userid, bio, homepage)
SELECT id, bio, homepage FROM tmp