Insertion de plusieurs valeurs dans des tables enfants à l'aide de INSERT...RETURNING et CTE de PostgreSQL
Pour insérer un user_id nouvellement extrait de la table parent table1 dans ses tables enfants table2 et table3, PostgreSQL fournit une solution élégante utilisant des expressions de table communes modifiant les données (CTE).
Grâce aux CTE, nous pouvons enchaîner plusieurs instructions INSERT pour exécuter plusieurs opérations en une seule transaction :
WITH ins1 AS (
INSERT INTO table1 (username, name, surname)
VALUES ('johnee', 'john', 'smith')
RETURNING user_id
)
, ins2 AS (
INSERT INTO table2 (user_id, password)
SELECT ins1.user_id, 'secret'
FROM ins1
)
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM ins1
RETURNING user_id;
Copier après la connexion
Ce code suit un processus étape par étape :
-
ins1 : Insère une nouvelle ligne dans la table1 et récupère l'ID utilisateur nouvellement généré à l'aide de RETURNING. Cette étape établit la connexion entre les tables enfants.
-
ins2 : Insère l'ID utilisateur de ins1 dans la table2 avec le mot de passe.
- Insère l'ID utilisateur de ins1 dans la table3 avec données supplémentaires telles que l'adresse, la ville et le téléphone.
Clé Points :
- Il est conseillé de fournir une liste de définitions de colonnes pour les INSERT afin de garantir l'intégrité des données.
- Les valeurs par défaut sont automatiquement insérées, de sorte que les colonnes avec des valeurs par défaut peuvent être omises dans l'instruction INSERT.
- La clause RETURNING finale de la troisième instruction INSERT renvoie l'identifiant utilisateur de la table3, bien qu'il soit généralement le même que l'instruction INSERT. user_id de la table1.
- Les CTE de modification des données permettent d'enchaîner plusieurs INSERT et autres opérations de manipulation de données en une seule transaction.
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!