Syntaxe des commandes SQL <<< |
Syntaxe de DELETE | Syntaxe de DO >>> |
14.1 Manipulation de données : SELECT , INSERT , UPDATE , DELETE 14 Syntaxe des commandes SQL Manuel de Référence MySQL 4.1 : Version Française ->Syntaxe de DELETE . Syntaxe de DO . Syntaxe de HANDLER . Syntaxe de INSERT . Syntaxe de LOAD DATA INFILE . Syntaxe de REPLACE . Syntaxe de SELECT . Sous-sélections ( SubSELECT ) . Syntaxe de TRUNCATE . Syntaxe de UPDATE |
14.1.1 Syntaxe de DELETE
Avec MySQL 3.23, DELETE sans clause WHERE retournera zéro comme nombre d'enregistrements affectés. Si vous voulez vraiment savoir combien d'enregistrements ont été effacés quand vous videz une table, et que vous êtes prêts à souffrir d'un léger ralentissement, vous pouvez utiliser une requête DELETE de ce genre :
Pour les tables MyISAM et BDB , vous pouvez spécifier une autre colonne AUTO_INCREMENT dans une clé multi-colonnes. Dans ce cas, la réutilisation des clés à partir de la fin de la séquence se fait aussi pour les tables MyISAM . Utiliser AUTO_INCREMENT . La commande DELETE supporte les clauses suivantes :
La vitesse d'exécution des opérations de suppressions peut être affectées par les facteurs présentés dans la section Vitesse des requêtes DELETE . Dans les tables de type MyISAM , les enregistrements effacés sont maintenus dans une liste liée et les requêtes INSERT suivantes réutilisent les vieux emplacements. Pour recouvrir l'espace inutilisé ou réduire la taille des fichiers, utilisez la commande OPTIMIZE TABLE ou l'utilitaire myisamchk pour réorganiser les tables. OPTIMIZE TABLE est plus simple, mais myisamchk est plus rapide. Voyez Syntaxe de OPTIMIZE TABLE et Optimisation de table .La clause spécifique MySQL LIMIT row_count de la commande DELETE indique au serveur le nombre maximal de ligne à supprimer avant de rendre le contrôle au client. Elle peut être utilisée pour s'assurer qu'une commande DELETE ne prend pas trop de temps. Vous pouvez simplement répéter la commande DELETE jusqu'à ce que le nombre de lignes effacées est inférieure à la valeur de LIMIT . Si la commande DELETE inclut la clause ORDER BY , les lignes sont effacées dans l'ordre spécifiée par cette clause. Elle n'est vraiment utilise que lorsqu'elle est couplée avec la clause LIMIT . Par exemple, la commande suivante applique la condition WHERE , trie les lignes avec la colonne timestamp , et efface la ligne la plus ancienne :
La première syntaxe de DELETE multi-table est supportée depuis MySQL 4.0.0. La deuxième syntaxe de DELETE multi-table est supportée depuis MySQL 4.0.2. La partie table_references liste les tables impliquées dans la jointure. Sa syntaxe est décrite dans la section Syntaxe de JOIN . L'idée est que seul les lignes concordante dans les tables énumérées avant le FROM ou avant la clause USING sont effacés. Le but est de pouvoir effacer des lignes de plusieurs tables en même temps tout en ayant d'autres tables pour les recherches.Le code .* après les noms de tables n'est présent que pour assurer la compatibilité avec Access :
La syntaxe autorise .* après le nom de la table pour assurer la compatibilité avec Access . Si vous utilisez une commande DELETE multi-tables avec des tables InnoDB pour lesquelles il y a des contraintes de clés étrangères, l'optimiseur MySQL risque de traiter les tables dans un ordre qui diffère de celui des relations parent/enfant de la clé. Dans ce cas, la commande échouera, et s'annulera. Pour résoudre ce problème, effacez les lignes tables par table, et utilisez les fonctionnalités ON DELETE que InnoDB fournit pour que les autres tables soient correctement traitées.Note : en MySQL 4.0, vous devez utiliser le véritable nom de table. En MySQL 4.1, vous devez utiliser l'alias éventuel, lorsque vous nommez la table : En MySQL 4.0 :
|
<< | Syntaxe de DELETE | >> |
Syntaxe des commandes SQL | Manipulation de données : SELECT , INSERT , UPDATE , DELETE | Syntaxe de DO |