Maison >base de données >tutoriel mysql >Comment puis-je insérer des données dans trois tables Postgres simultanément à l'aide d'une seule requête ?
Supposons que vous deviez insérer des données dans trois tables simultanément à l'aide d'une seule requête. La structure du tableau est la suivante :
<code class="language-sql">CREATE TABLE sample ( id bigserial PRIMARY KEY, lastname varchar(20), firstname varchar(20) ); CREATE TABLE sample1( user_id bigserial PRIMARY KEY, sample_id bigint REFERENCES sample, adddetails varchar(20) ); CREATE TABLE sample2( id bigserial PRIMARY KEY, user_id bigint REFERENCES sample1, value varchar(10) );</code>
Vous devez garantir la clé primaire pour chaque insertion, puis l'utiliser dans les tableaux suivants. Cependant, l'exécution d'une seule requête pour chaque insertion ne permet pas une réutilisation immédiate des valeurs clés.
Afin d'insérer des données dans trois tables simultanément, vous pouvez utiliser une modification de données CTE (Common Table Expression). Ils établissent des dépendances entre insertions consécutives :
<code class="language-sql">WITH ins1 AS ( INSERT INTO sample(firstname, lastname) VALUES ('fai55', 'shaggk') RETURNING id AS sample_id ), ins2 AS ( INSERT INTO sample1 (sample_id, adddetails) SELECT sample_id, 'ss' FROM ins1 RETURNING user_id ) INSERT INTO sample2 (user_id, value) SELECT user_id, 'ss2' FROM ins2;</code>
Le premier CTE, ins1, s'insère dans la table exemple et renvoie la clé générée (sample_id). Ensuite, ins2 s'insère dans sample1 en utilisant le sample_id de ins1 et renvoie le user_id. Enfin, le troisième INSERT s'insère dans sample2 en utilisant user_id.
Il est généralement plus efficace de définir au préalable les lignes de données dans le CTE :
<code class="language-sql">WITH data(firstname, lastname, adddetails, value) AS ( VALUES ('fai55', 'shaggk', 'ss', 'ss2'), ('fai56', 'XXaggk', 'xx', 'xx2') ) ... -- (查询的其余部分保持不变)</code>
N'oubliez pas de prendre en compte des facteurs tels que les contraintes d'unicité, les conversions de types et la gestion des écritures simultanées pour garantir l'intégrité des données.
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!