333 Shares 6139 views

"Pitfalls" de la commande DML Update MySQL

Chaque programmeur qui a dû travailler avec des bases de données a rencontré des opérateurs DML (comme Select , Insert , Delete) Et Mise à jour . L'environnement MySQL utilise également toutes les commandes ci-dessus dans son arsenal.

Ces opérateurs indiquent logiquement leur but: sélectionner des enregistrements, insérer de nouvelles valeurs, mettre à jour les données existantes, remplir ou selon les conditions spécifiées, supprimer des informations dans la base de données. L'enseignement des matériaux théoriques décrit en détail le principe de fonctionnement de chaque équipe et leur syntaxe, mais il n'y a aucune mention de difficultés qui peuvent apparaître dans la pratique pendant l'utilisation. Ce matériel sera consacré à la prise en compte de certains d'entre eux.

En bref sur les opérateurs DML (Insérer)

Avant de poursuivre, il est nécessaire de rappeler plus en détail le but de chacune des fonctions. Nous serons plus intéressés par deux opérateurs: Insérer Et Mise à jour , puisque c'est à partir de cela que les principales difficultés se posent lors du traitement de grandes quantités de données .

Vous devez commencer par la commande Insérer , puis passez en mode Correctif. Le système MySQL , comme tout autre SGBD moderne, utilise l'opération Insérer pour ajouter de nouvelles entrées aux tables de base de données existantes . La syntaxe de cette opération est très simple et directe. Il contient une énumération des champs où les valeurs seront entrées, la destination est le nom de la table – et la liste des entrées directement. Chaque fois que la commande Insérer est exécutée, la base de données sera mise à jour avec de nouvelles valeurs.

Opérateur de mise à jour

Dans la pratique, cependant, des situations apparaissent souvent que, pour un ensemble de données, une ou plusieurs valeurs d'attribut doivent être mises à jour. À titre d'exemple, nous pouvons citer la situation lorsque l'entreprise a subit une réforme avec le renouveau des départements principaux. Dans ce cas, il est nécessaire d'apporter des modifications pour chaque département. Si seulement les noms changent, le problème est résolu très rapidement. Mais si l'encodage de chaque composant de l'ensemble de la production change, ce qui, en règle générale, sert de clé primaire, cela entraîne des changements dans l'information et pour chaque employé.

Pour résoudre ce problème, un DML-operatorUpdate peut être appliqué . Le serveur MySQL , fonctionnant avec un grand nombre d'enregistrements, en utilisant l'opérateur de mise à jour, exécutera la requête demandée et résoudra le problème. Mais parfois, pendant la mise à jour, il n'est pas très clair et difficile d'expliquer les difficultés. Il s'agit de la complexité de la mise à jour des enregistrements qui seront discutés plus tard.

À propos de ce qui est dit en théorie …

La commande Update, comme indiqué ci-dessus, sert à mettre à jour les enregistrements existants dans la table. Mais en pratique, les clients qui accèdent aux serveurs de base de données ne sont pas toujours connus, il existe un certain ensemble de données dans les tableaux ou non. Une vérification préliminaire de la disponibilité des données dans la base de données pour les mises à jour ultérieures conduit à des capacités de serveur longues et gaspillées.

Pour éviter cela, le SGBD comprend une construction spéciale MySQL – Insert * Update , dans laquelle l'insertion ou la mise à jour peuvent être exécutées indépendamment l'une de l'autre. C'est-à-dire, lorsqu'il existe une entrée pour une certaine condition dans le tableau, une mise à jour se produira. Si aucune donnée n'est trouvée pour la condition en question, le serveur MySQL pourra effectuer la demande d'addition de données.

Mettre à jour les données s'il y a des doublons

Un composant important d'une telle requête Insertion dans le système de gestion de base de données MySQL est le préfixe «On Duplicate Key Update» . La syntaxe complète de la requête est la suivante: " insérer dans les valeurs test_table (employeur_id, nom) (1, 'Abramov') sur la mise à jour de la clé en double last_modified = NOW (); ".

Une telle demande peut être utilisée pour enregistrer les actions des employés, par exemple, déterminer le temps de passage de l'entreprise qui passe avec le calcul ultérieur du moment de la pause et l'identification des retards. Afin de ne pas entrer plusieurs enregistrements dans la table, il est suffisant pour chaque employé de conserver les enregistrements avec une mise à jour permanente. C'est la conception de la vérification en double qui vous permet de le faire.

En ce qui concerne les problèmes …

Compte tenu de l'exemple ci-dessus de l'enregistrement des actions des employés au point de contrôle, le problème peut être l'utilisation de champs d' auto- incrémentation , qui sont habituellement utilisés pour remplir les valeurs des _keys primaires. Lorsque vous utilisez la commande MySQL Update dans un design avec Insert Auto _ increment, les champs augmentent constamment.

De même, tout se passe lorsque le design de remplacement est utilisé, dans le cas de la détection en double. La valeur "Autoincremental" augmente même si cela n'est pas nécessaire. Pour cette raison, il existe des problèmes de valeurs manquantes ou de débordement de la gamme, ce qui entraîne des violations des performances des systèmes de gestion de bases de données.

La plus grande probabilité d'apparition d'un problème

Le problème décrit devrait être considéré par les développeurs Web , car il est le plus commun dans les systèmes multi-utilisateurs (sites Internet, portails, etc.) lorsqu'un grand nombre d' Insertion Et mettez à jour MySQL.

PHP : les appels à la base de données sont effectués très souvent. Par conséquent, la réalisation de la valeur maximale par les champs définis comme auto_increment se produit rapidement et, lors de l'analyse des difficultés rencontrées, il est impossible d'établir les causes à la fois.

Par conséquent, les développeurs sont invités à aborder attentivement l'utilisation de la clé en double sur la commande mysql update. Sélectionnez – les requêtes lors de l'accès au serveur de base de données fonctionneront sans erreurs, mais l'ajout de nouveaux enregistrements à la base de données est rempli de situations désagréables, ce qui entraîne ensuite de sérieux problèmes. En alternative, il est recommandé que les champs auto-incrémentaux vérifient initialement la disponibilité des enregistrements pour eux, puis les mettent à jour.