O que aconteceria se você quisesse criar muitos desses registros (para registrar 10 usuários, não apenas um)? Eu encontro a seguinte solução (apenas 5 consultas):
Etapa I: Crie uma tabela temporária para armazenar novos dados.
CREATE TEMPORARY TABLE tmp (id bigint(20) NOT NULL, ...)...;
Em seguida, preencha esta tabela com valores.
INSERT INTO tmp (username, password, bio, homepage) VALUES $ALL_VAL
Aqui, em vez de $ALL_VAL
colocar uma lista de valores: ('test1', 'test1', 'bio1', 'home1'), ..., ('testn', 'testn', 'bion', 'homen')
Etapa II: envie dados para a tabela 'usuário'.
INSERT IGNORE INTO users (username, password)
SELECT username, password FROM tmp;
Aqui, "IGNORE" pode ser usado, se você permitir que alguns usuários já estejam dentro. Opcionalmente, você pode usar UPDATE semelhante à etapa III, antes desta etapa, para descobrir quem os usuários já estão dentro (e marcá-los na tabela tmp). Aqui supomos que esse nome de usuário é declarado como PRIMARY
na tabela de usuários.
Etapa III: aplique a atualização para ler todos os IDs de usuários da tabela tmp. ESTE É UM PASSO ESSENCIAL.
UPDATE tmp JOIN users ON tmp.username=users.username SET tmp.id=users.id
Etapa IV: criar outra tabela, usando o ID de leitura para usuários
INSERT INTO profiles (userid, bio, homepage)
SELECT id, bio, homepage FROM tmp