INSERT PostgreSQL
L'instruction `INSERT` de PostgreSQL est utilisée pour ajouter de nouvelles tables dans un tableau spécifique. Il s'agit d'une opération fondamentale pour alimenter et mettre à jour les bases de données avec de nouvelles informations.
Utilisation
La syntaxe de base de l'instruction `INSERT` est utilisée lorsque vous devez ajouter de nouveaux tableaux. Il spécifie le nom du tableau, les tableaux dans lesquels insérer des données et les valeurs correspondantes.
sql
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Dans cette syntaxe, `nom_table` est le tableau cible, `column1, column2, ...` sont les tableaux à recevoir les données, et `value1, value2, ...` sont les valeurs réelles des données à insérer.
Exemples
1. Insertion de base
sql
INSERT INTO employees (first_name, last_name, email)
VALUES ('John', 'Doe', 'john.doe@example.com');
Cet exemple insère une seule ligne dans le tableau `employees` avec les valeurs `first_name`, `last_name`, et `email`.
2. Insérer plusieurs lignes
sql
INSERT INTO products (product_name, price)
VALUES
('Product A', 10.99),
('Product B', 15.49);
Ici, deux tableaux sont insérés dans le tableau `products` en une seule instruction, chacun avec un `nom_du_produit` et un `prix`.
3. Insérer avec une sous-requête
sql
INSERT INTO sales (product_id, quantity)
SELECT product_id, 5
FROM products
WHERE product_name = 'Product C';
Cet exemple insère des données dans le tableau `sales` en sélectionnant `product_id` dans le tableau `products` où le `product_name` est 'Product C', en fixant la `quantity` à 5.
4. Gestion des doublons avec ON CONFLICT
sql
INSERT INTO users (username, email)
VALUES ('jane_doe', 'jane.doe@example.com')
ON CONFLICT (username) DO UPDATE
SET email = EXCLUDED.email;
Cet exemple montre comment gérer les doublons potentiels en mettant à jour le `email` si le `username` existe déjà dans le tableau `users`.
5. Utilisation de la clause RETURNING
sql
INSERT INTO orders (customer_id, order_date)
VALUES (123, '2023-10-11')
RETURNING order_id;
La clause `RETURNING` est utilisée pour retourner le `order_id` de la ligne nouvellement insérée, ce qui est particulièrement utile avec les champs auto-incrémentés.
Conseils et bonnes pratiques
- Spécifiez les colonnes de manière explicite. Dressez toujours la liste des tableaux dans une instruction `INSERT` afin d'assurer la clarté et de maintenir la compatibilité en cas de modification de la structure de la table.
- Validez les types de données. Assurez-vous que les valeurs insérées correspondent aux types de données des colonnes.
- Utilisez les transactions pour les encarts en vrac. Enveloppez plusieurs opérations `INSERT` dans une transaction pour assurer l'atomicité et améliorer les performances. Par exemple :
sql BEGIN; INSERT INTO products (product_name, price) VALUES ('Product C', 12.99); INSERT INTO products (product_name, price) VALUES ('Product D', 18.49); COMMIT;
- Gérer les doublons. Utilisez `ON CONFLICT` pour traiter les conflits de clés potentiels, et non pas `INSERT ...'. ON DUPLICATE KEY UPDATE`, qui est la syntaxe de MySQL.
- Exploitez judicieusement les sous-requêtes. Utilisez des sous-requêtes pour l'insertion dynamique de données provenant d'autres tableaux afin de maintenir l'intégrité et la cohérence des données.