PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Insérer des données dans des tables liées par une clé étrangère

Vous pouvez le faire dans une instruction sql pour les clients existants, 3 instructions pour les nouveaux. Il suffit d'être optimiste et de faire comme si le client existait déjà :

insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);

Si le client n'existe pas, vous obtiendrez une exception sql dont le texte ressemblera à :

null value in column "customer_id" violates not-null constraint

(à condition que vous ayez rendu customer_id non nullable, ce que je suis sûr que vous avez fait). Lorsque cette exception se produit, insérez le client dans la table des clients et refaites l'insertion dans la table des commandes :

insert into customer(name) values ('John');
insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);

À moins que votre entreprise ne se développe à un rythme qui fera de "où mettre tout l'argent" votre seul véritable problème, la plupart de vos encarts seront destinés à des clients existants. Ainsi, la plupart du temps, l'exception ne se produira pas et vous aurez terminé en une seule instruction.