String mit automatisch inkrementierendem Primärschlüssel in MySQL-Einfügung verketten
Beim Einfügen von Daten in eine MySQL-Datenbank kann es nützlich sein, einen zu verketten Zeichenfolge mit der automatisch inkrementierenden Primärschlüssel-ID, um eine eindeutige Kennung zu erstellen.
Betrachten Sie die folgende Benutzertabelle:
CREATE TABLE users ( user_id INT NOT NULL AUTO_INCREMENT, username VARCHAR(255) NOT NULL, PRIMARY KEY (user_id) );
Angenommen, Sie möchten die Benutzernamenspalte auf ein Zeichenfolgenpräfix festlegen (z. B. , 'Benutzer'), gefolgt von der automatisch inkrementierenden Benutzer-ID. Der Wert „user_id“ wird jedoch erst nach dem Einfügevorgang generiert.
Ein Versuch, dies mit einer einzelnen Anweisung mithilfe eines BEFORE INSERT-Triggers zu erreichen, ist nicht möglich, da der Wert „user_id“ noch nicht verfügbar ist. Ebenso ist die Verwendung eines AFTER INSERT-Triggers zum Aktualisieren des Benutzernamenfelds nicht zulässig.
Lösung 1: Einfügen und Aktualisieren
Ein Ansatz besteht darin, zuerst den Einfügevorgang durchzuführen. Führen Sie dann sofort eine UPDATE-Anweisung aus, um die Zeichenfolge und die Benutzer-ID zu verketten. Dies kann in PHP wie folgt erfolgen:
// Insert user data $stmt = $mysqli->prepare(...); $stmt->bind_param(...); $stmt->execute(); // Get the auto-incremented user ID $user_id = $mysqli->insert_id; // Update username $update_stmt = $mysqli->prepare("UPDATE users SET username = 'user$user_id' WHERE user_id = ?"); $update_stmt->bind_param("i", $user_id); $update_stmt->execute();
Lösung 2: Benutzerdefinierte INSERT-Abfrage
Wenn die user_id kein automatisch inkrementierender Wert ist, können Sie einfügen der verkettete Benutzername in der ursprünglichen INSERT-Anweisung. Dazu muss die SQL-Abfrage so geändert werden, dass sie die Verkettung enthält:
INSERT INTO users (username, ...) VALUES ('user' || ?, ...);
Ersetzen Sie in dieser Abfrage den Platzhalter ? mit der PHP-Variablen, die die Benutzer-ID enthält, die Sie beim Einfügen angeben.
Generierte Spalten (MySQL 5.7 und höher)
MySQL 5.7 führte generierte Spalten ein, mit denen Sie erstellen können Spalten basierend auf Ausdrücken. Es ist jedoch nicht möglich, eine generierte Spalte zu definieren, die auf eine automatisch inkrementierende Spalte verweist.
Das obige ist der detaillierte Inhalt vonWie verkette ich einen String mit einem automatisch inkrementierenden Primärschlüssel in MySQL Insert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!