Sql:INSERT
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Commande SQL standard |
| Catégorie | DML (Data Manipulation Language) |
| Rôle | Ajouter une ou plusieurs lignes dans une table |
| Voir aussi | Sql · Sql:SELECT · Sql:UPDATE |
INSERT est la commande SQL d'ajout de lignes dans une table. Elle fait partie du DML avec Sql:SELECT, Sql:UPDATE et Sql:DELETE.
Syntaxe
Insertion de valeurs littérales, colonnes implicites (dans l'ordre de la table) :
INSERT INTO nom_table VALUES (valeur1, valeur2, valeur3, ...);
Insertion avec colonnes explicites (recommandé — indépendant de l'ordre des colonnes de la
table, résiste à un futur ALTER TABLE ADD COLUMN) :
INSERT INTO nom_table (colonne1, colonne2, colonne3, ...)
VALUES (valeur1, valeur2, valeur3, ...);
Insertion à partir du résultat d'un SELECT (copie de lignes entre tables) :
INSERT INTO table_destination (col1, col2, col3)
SELECT colA, colB, colC FROM table_source WHERE condition;
Exemples
-- Insertion simple, valeurs dans l'ordre des colonnes de la table
INSERT INTO utilisateurs VALUES (1, 'Jean Dupont', 'jean.dupont@example.com');
-- Insertion avec colonnes explicites
INSERT INTO utilisateurs (nom, email) VALUES ('Marie Martin', 'marie.martin@example.com');
-- Insertion multiple en une seule commande
INSERT INTO utilisateurs (nom, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com');
-- Copie de lignes filtrées d'une table vers une autre
INSERT INTO archives_utilisateurs (id, nom, email)
SELECT id, nom, email FROM utilisateurs WHERE actif = 0;
En ligne de commande (client MySQL, hors session interactive) :
mysql -u utilisateur -p nom_base -e "INSERT INTO utilisateurs (email) VALUES ('toto@example.com')"
Passer le mot de passe en clair sur la ligne de commande (option -pmotdepasse
collée) l'expose dans l'historique shell et la liste des processus (ps) — préférer
-p seul (invite interactive) ou un fichier d'option ~/.my.cnf
(permissions 600).
Variantes par moteur
- MySQL/MariaDB :
INSERT ... ON DUPLICATE KEY UPDATEpour un
upsert (insérer, ou mettre à jour si la clé existe déjà).
- PostgreSQL :
INSERT ... ON CONFLICT (colonne) DO UPDATE/NOTHING, même
finalité que ON DUPLICATE KEY UPDATE.
- Oracle :
MERGE INTOpour un upsert, plus verbeux mais plus flexible
(conditions différentes pour la branche insertion et la branche mise à jour).
Voir aussi
- Sql — panorama du langage SQL
- Sql:SELECT — lire des données (y compris pour un INSERT ... SELECT)
- Sql:UPDATE — modifier des lignes existantes