Skip to content

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
  1. 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 avec

    Query : OK n row affected (time)
    Records:	Duplicated:	Warnings:
    



    Records : nombre d’enregistrements à faire

    Duplicated : nombre d’enregistrements deja existant

  2. 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
  3. 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).

screen-mysql1.JPG

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