Cosa succederebbe se si volessero creare molti di questi record (per registrare 10 utenti, non solo uno)? Trovo la seguente soluzione (solo 5 query):
Passaggio I: creare una tabella temporanea per archiviare nuovi dati.
CREATE TEMPORARY TABLE tmp (id bigint(20) NOT NULL, ...)...;
Quindi, riempire questa tabella con i valori.
INSERT INTO tmp (username, password, bio, homepage) VALUES $ALL_VAL
Qui, invece di $ALL_VALinserire un elenco di valori: ('test1', 'test1', 'bio1', 'home1'), ..., ('testn', 'testn', 'bion', 'homen')
Passaggio II: inviare i dati alla tabella "utente".
INSERT IGNORE INTO users (username, password)
SELECT username, password FROM tmp;
Qui è possibile utilizzare "IGNORE", se si consente ad alcuni utenti di essere già dentro. Facoltativamente, è possibile utilizzare UPDATE in modo simile al passaggio III, prima di questo passaggio, per individuare gli utenti già presenti (e contrassegnarli nella tabella tmp). Qui supponiamo che quel nome utente sia dichiarato come PRIMARYnella tabella degli utenti.
Passaggio III: applicare l'aggiornamento per leggere tutti gli ID utenti dagli utenti alla tabella tmp. QUESTO È UN PASSO ESSENZIALE.
UPDATE tmp JOIN users ON tmp.username=users.username SET tmp.id=users.id
Passaggio IV: creare un'altra tabella, utilizzando l'id di lettura per gli utenti
INSERT INTO profiles (userid, bio, homepage)
SELECT id, bio, homepage FROM tmp