Maison >base de données >tutoriel mysql >Comment les CTE de PostgreSQL peuvent-ils gérer efficacement plusieurs INSERT avec RETURNING pour les mises à jour multi-tables ?

Comment les CTE de PostgreSQL peuvent-ils gérer efficacement plusieurs INSERT avec RETURNING pour les mises à jour multi-tables ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-02 14:05:40928parcourir

How Can PostgreSQL's CTEs Efficiently Handle Multiple INSERTs with RETURNING for Multi-Table Updates?

INSÉRER plusieurs tables... RETURNING pour les mises à jour multi-tables dans PostgreSQL

Insérer des données dans plusieurs tables enfants tout en faisant référence aux données nouvellement insérées à partir d'un la table parent peut être une tâche difficile. Dans ce contexte, PostgreSQL fournit une solution puissante utilisant des expressions de table communes (CTE) modifiant les données.

Dans un premier temps, nous pouvons récupérer l'identifiant utilisateur d'une ligne nouvellement insérée dans une table parent à l'aide de la clause RETURNING :

INSERT INTO table1 (default,'johnee','john','smith',default) RETURNING userid;

Pour effectuer les multiples INSERT, nous pouvons utiliser des CTE de modification des données comme suit :

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;

Dans ce code, le CTE ins1 effectue l'INSERT dans la table1 et renvoie l'id_utilisateur. Le CTE ins2 utilise ensuite le user_id de ins1 pour insérer des données dans la table2. Enfin, le troisième INSERT utilise l'identifiant utilisateur de ins1 pour insérer des données dans la table3, renvoyant éventuellement l'identifiant utilisateur résultant.

En utilisant des CTE modifiant les données, nous pouvons enchaîner efficacement plusieurs INSERT et garantir que les données nouvellement insérées dans l'enfant tables maintient les relations nécessaires avec la table parent.

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:
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