Instructions de mise à jour
Instruction de Mise à Jour
Les instructions de mises à jour font parties des commandes DML (Data Manipulation Language).
Elles sont : INSERT,REPLACE,UPDATE,DELETE,TRUNCATE
Ajouter un enregistrement
L’ajout d’enregistrement se fait par la commande INSERT (valable sur tous les SGBD) :
INSERT [INTO] table[(col1,col2,...)] VALUES(val1,val2,...);
On peut ne pas définir le nom des colonnes, on peut mettre le nom des colonnes dans l’ordre que l’on souhaite mais il faut vérifier que les valeurs correspondent.
Syntaxe spécifique à MySQL :
INSERT INTO table SET col1=val1,col2=val2...;
A savoir que si une colonne n’est pas spécifié, elle prendra la valeur par défaut. Si cette derniere n’as pas de valeur par défaut, elle prendra la valeur par défaut du type.
Attention au SQL_MODE
Insertion multiple
INSERT INTO table (col1,col2) VALUES (val1,val2), (val1,val2), ... ;
Attention : Si on fait un INSERT multiple sur une table MyISAM, les enregistrements ayant reussi sont entré jusqu’à l’erreur contrairement à InnoDB qui n’inserera rien.
INSERT INTO t1 (col1,col2) SELECT val1,val2 FROM t2;
Attention : il faut le meme nombres de champs définis par t1 que de champs issu du SELECT
On peut réaliser n’importe quel SELECT.
Pour les performances, il faut mieu faire un INSERT multiple que plusieurs INSERT d’affilé car :
- Pour MyISAM, MySQL lors d’une insertion déclenche un LOCK/DELOCK pour les INSERT alors que pour les INSERT multiples, il n’y aura qu’une seule phase de vérouillage
- Pour InnoDB, Il y aura autant de transaction à faire que d’INSERT : start trasaction, insertion, stop transaction, ecriture dans le journal, validation.
Traitement des clés dupliquées
- IGNORE L’ERREUR :
INSERT IGNORE INTO table(col1,col2) VALUES(val1,val2)
Si on obtient une erreur de clé dupliquée, l’enregistrement ne sera PAS stocké et MySQL passera au suivant. Lorsqu’on executera la requete, on aura un etat de l’insertion avecQuery : OK n row affected (time) Records: Duplicated: Warnings:
Records : nombre d’enregistrements à faire
Duplicated : nombre d’enregistrements deja existant - PERMETTRE DE METTRE A JOUR L’ENREGISTREMENT DUPLIIQUE :
INSERT INTO table(col1,col2) VALUES(val1,val2) ON DUPLICATE KEY UPDATE col1=’val1′,…
L’ordre des colonnes dans le ON DUPLICATE KEY peut etre différent de celui du INSERT
Le nombre d’enregitrements affecté est de Records+Duplicated - PERMET DE REMPLACER L’ENREGISTREMENT :
REPLACE INTO table(col1,col2) VALUES(val1,val2)
REPLACE prends tous les types d’insert en les remplacant par INSERT. Si il n’y a pas de clé dupliquée, alors c’est un INSERT. Au cas où la clé est dupliquée, MySQL supprime les enregistrements en conflit avec l’insertion de ligne (REPLACE = DELETE+INSERT).
Modifier un enregistrement
Pour modifier un enregistrement, on dispose de l’instruction UPDATE :
UPDATE table SET col1='val1'[,col2='val2'...] [WHERE condition ORDER BY col1[,col2...] LIMIT n]
LIMIT est un standard MySQL. Un update ne retourne aucune ligne modifié si et seulement si la condition n’est pas remplie
Query:ok, n row affected Rows matched:m changed:n warnings:o
Rappel : la condition est obligatoire si et seulement si on est connecté avec –i-am-a-dummy ou –safe-updates
Supprimer un enregistrement
Pour supprimer un enregistrement, on dispose des instructions DELETE et TRUNCATE :
TRUNCATE
TRUNCATE table;
Lors d’un TRUNCATE, MySQL va dropper la table en question pour la recréer. Il n’y a pas de possibilité de mettre la clause WHERE, et donc impossible de tronquer une ligne.
Si la table dispose d’une PRIMARY KEY AUTO_INCREMENT, la valeur de celle ci sera réinitialisée.
Il n’est pas possible d’ajouter un alias à la table
Lors de l’opération d’un TRUNCATE sous InnoDB, MySQL affichera le nombre de lignes affectées à contrario de MyISAM
DELETE
DELETE FROM table [WHERE condition ORDER BY col1[,col2...] LIMIT n]
Lors d’un delete, l’AUTO_INCREMENT continue. L’execution d’un DELETE est plus lente qu’un TRUNCATE.
Il est possible de réaliser des sous requetes dans un DELETE
Les privileges
| Commande | Privilege |
| INSERT,DELETE,UPDATE | INSERT,DELETE,UPDATE |
| REPLACE | INSERT,DELETE |
| TRUNCATE | DELETE |
Commentaires récents