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) );
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();
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' || ?, ...);
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!