Ich habe bereits andere Antworten angesehen und fühle immer noch, dass meine Frage relevant ist und einen separaten Eintrag verdient.
Ich habe eine Tabelle namens Einstellungen (in der Benutzereinstellungen gespeichert sind) und ich muss mehrere Einstellungen für jeden Benutzer einfügen. Zunächst hatte ich für jede Einstellung eine separate Einfügeanweisung ausgeführt, aber nachdem ich das nicht als besonders gute Methode empfunden hatte, dachte ich daran, mehrere Zeilen mit derselben Einfügeanweisung einzufügen. Mein einziges Problem ist, dass ich die auto_incremented IDs jeder der neu eingefügten Zeilen haben möchte.
Ich habe Antworten gelesen, die sagen, dass dies nicht möglich/skalierbar usw. ist, aber ich denke, dass ich die Lösung gefunden habe. Ich möchte Feedback, ob mein Weg richtig ist oder nicht, und deshalb diese Frage.
Was ich gemacht habe, ist einfach. Nach dem Einfügen der mehreren Zeilen rufe ich last_insert_id() auf, um die ID der ersten Zeile der gleichzeitig eingefügten Zeilen zu erhalten. Ich habe bereits die Anzahl der eingefügten Zeilen, also erstelle ich einfach ein neues Array und fülle es mit IDs, die bei last_insert_id() beginnen und bei last_insert_id()+n-1 enden (wobei n die Anzahl der eingefügten Zeilen ist).
Ich denke, dass dies funktionieren wird, aus folgenden Gründen:
1.) Die MYSQL-Dokumentation besagt, dass last_insert_id() von der Verbindung abhängig ist und wenn ein anderer Client/ eine andere Verbindung neue Datensätze einfügt, hat dies keinen Einfluss auf das last_insert_id() des anderen Clients.
2.) Ich denke, dass, da der Einfügevorgang durch eine einzelne SQL-Anweisung durchgeführt wird, die gesamte Einfügung als einzelne Transaktion behandelt werden sollte. Wenn das zutrifft, sollten ACID-Regeln gelten und die auto_incremented Werte sequenziell sein. Ich bin mir bei diesem Punkt nicht sicher.
Das sind meine Gründe, warum ich denke, dass die Logik funktionieren sollte. Also lautet meine Frage: Wird die obige Logik unter ALLEN Bedingungen funktionieren? Kann ich darauf vertrauen, dass sie in allen Situationen korrekt funktioniert? Ich weiß, dass es derzeit für mich funktioniert.