Maison > base de données > tutoriel mysql > Comment les CTE PostgreSQL peuvent-ils insérer efficacement plusieurs lignes dans plusieurs tables ?

Comment les CTE PostgreSQL peuvent-ils insérer efficacement plusieurs lignes dans plusieurs tables ?

Linda Hamilton
Libérer: 2025-01-01 13:23:12
original
830 Les gens l'ont consulté

How Can PostgreSQL CTEs Efficiently Insert Multiple Rows Across Multiple Tables?

Insertion de plusieurs lignes avec les CTE de PostgreSQL

Supposons que vous disposiez d'une base de données relationnelle avec trois tables : table1, table2 et table3. La table table1 contient des informations générales sur l'utilisateur, tandis que les tables table2 et table3 contiennent des données supplémentaires telles que des mots de passe et des adresses. Lorsque vous ajoutez un nouvel utilisateur dans la table1, vous souhaitez insérer simultanément l'ID utilisateur et d'autres données uniques dans les tables enfants table2 et table3.

Les CTE de modification de données de Postgres 9.3 fournissent une solution à ce scénario. Les CTE vous permettent d'enchaîner plusieurs opérations INSERT de manière efficace.

Voici comment utiliser les CTE modifiant les données pour accomplir votre tâche :

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
    -- Nothing to return here
)
INSERT INTO table3 (user_id, address, city, phone)
SELECT ins1.user_id, ..., ...
FROM ins1
RETURNING user_id;
Copier après la connexion

Répartition du CTE :

  • ins1 CTE : Insère une nouvelle ligne dans table1 et renvoie l'ID utilisateur nouvellement créé.
  • ins2 CTE : Utilise l'ID utilisateur de ins1 pour insérer des données dans la table2. Puisqu'il n'est pas nécessaire de renvoyer une valeur, elle est omise.
  • INSERT final : Insère des données dans la table3 en utilisant l'id_utilisateur de ins1 et des colonnes supplémentaires. Vous pouvez spécifier les colonnes et les valeurs souhaitées selon vos besoins. La clause RETURNING facultative vous permet de récupérer l'ID utilisateur nouvellement créé à partir de la table3.

Bonnes pratiques :

  • Incluez toujours une liste de définitions de colonnes dans votre INSERT pour garantir la cohérence avec la structure de votre table.
  • Si une colonne doit recevoir une valeur par défaut, omettez-la simplement dans INSERT déclaration; Postgres insérera automatiquement la valeur par défaut.
  • Le dernier CTE peut éventuellement renvoyer une valeur, ce qui pourrait être utile pour un traitement ultérieur ou pour récupérer les identifiants nouvellement créés.

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