Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie verkette ich einen String mit einem automatisch inkrementierenden Primärschlüssel in MySQL Insert?

Barbara Streisand
Freigeben: 2024-11-10 03:30:02
Original
1049 Leute haben es durchsucht

How to Concatenate a String with an Auto-Incrementing Primary Key in MySQL Insert?

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)
);
Nach dem Login kopieren

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();
Nach dem Login kopieren

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' || ?, ...);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage