Maison > base de données > tutoriel mysql > Comment concaténer une chaîne avec une clé primaire à incrémentation automatique dans MySQL Insert ?

Comment concaténer une chaîne avec une clé primaire à incrémentation automatique dans MySQL Insert ?

Barbara Streisand
Libérer: 2024-11-10 03:30:02
original
1151 Les gens l'ont consulté

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

Concaténation d'une chaîne avec une clé primaire à incrémentation automatique dans MySQL Insert

Lors de l'insertion de données dans une base de données MySQL, il peut être utile de concaténer un chaîne avec l'ID de clé primaire à incrémentation automatique pour créer un identifiant unique.

Considérez l'utilisateur suivant table :

CREATE TABLE users (
  user_id   INT NOT NULL AUTO_INCREMENT,
  username   VARCHAR(255) NOT NULL,
  PRIMARY KEY (user_id)
);
Copier après la connexion

Supposons que vous souhaitiez définir la colonne du nom d'utilisateur sur un préfixe de chaîne (par exemple, 'user') suivi de l'id_utilisateur à incrémentation automatique. Cependant, la valeur user_id n'est générée qu'après l'opération d'insertion.

Une tentative pour y parvenir avec une seule instruction à l'aide d'un déclencheur BEFORE INSERT n'est pas réalisable car la valeur user_id n'est pas encore disponible. De même, l'utilisation d'un déclencheur AFTER INSERT pour mettre à jour le champ du nom d'utilisateur n'est pas autorisée.

Solution 1 : Insérer et mettre à jour

Une approche consiste à effectuer d'abord l'opération d'insertion, puis exécutez immédiatement une instruction UPDATE pour concaténer la chaîne et l'id_utilisateur. Cela peut être fait en PHP comme suit :

// 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();
Copier après la connexion

Solution 2 : Requête INSERT personnalisée

Si l'id_utilisateur n'est pas une valeur à incrémentation automatique, vous pouvez insérer le nom d'utilisateur concaténé dans l'instruction INSERT d'origine. Cela nécessite de modifier la requête SQL pour inclure la concaténation :

INSERT INTO users (username, ...) VALUES ('user' || ?, ...);
Copier après la connexion

Dans cette requête, remplacer l'espace réservé ? avec la variable PHP contenant l'id_utilisateur que vous spécifiez lors de l'insertion.

Colonnes générées (MySQL 5.7 et versions ultérieures)

MySQL 5.7 a introduit des colonnes générées, qui vous permettent de créer colonnes basées sur des expressions. Cependant, il n'est pas possible de définir une colonne générée faisant référence à une colonne auto-incrémentée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal