Maison > base de données > tutoriel mysql > le corps du texte

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
1049 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!

source:php.cn
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