MariaDB - Gestion des doublons

MariaDB, comme indiqué dans les leçons précédentes, permet la duplication des enregistrements et des tables dans certaines situations. Certains de ces doublons ne sont en fait pas des doublons en raison de données ou de types d'objet distincts, ou en raison de la durée de vie ou du stockage unique de l'objet d'opération. Ces doublons ne posent généralement aucun problème.

Dans certaines situations, les doublons posent des problèmes, et ils apparaissent souvent en raison d'actions implicites ou de la politique indulgente d'une commande MariaDB. Il existe des moyens de contrôler ce problème, de rechercher les doublons, de supprimer les doublons et d'empêcher la création de doublons.

Stratégies et outils

Il existe quatre méthodes principales pour gérer les doublons:

  • Cherchez-les avec JOIN et supprimez-les avec une table temporaire.

  • Utilisez INSERT ... ON DUPLICATE KEY UPDATE pour mettre à jour lors de la découverte d'un doublon.

  • Utilisez DISTINCT pour élaguer les résultats d'une instruction SELECT et supprimer les doublons.

  • Utilisez INSERT IGNORE pour arrêter l'insertion de doublons.

Utilisation de la jointure avec une table temporaire

Effectuez simplement une semi-jointure comme une jointure interne, puis supprimez les doublons trouvés avec une table temporaire.

Utiliser INSERT

Lorsque INSERT ... ON DUPLICATE KEY UPDATE découvre une clé unique ou primaire en double, il effectue une mise à jour. Lors de la découverte de plusieurs clés uniques, il ne met à jour que la première. Par conséquent, ne l'utilisez pas sur des tables avec plusieurs index uniques.

Examinez l'exemple suivant, qui révèle ce qui se passe dans une table contenant des valeurs indexées lors de l'insertion dans un champ rempli -

INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Note - S'il ne trouve aucune clé, une instruction INSERT ... ON DUPLICATE KEY UPDATE s'exécute comme une instruction d'insertion normale.

Utilisation de DISTINCT

Les clauses DISTINCT suppriment les doublons des résultats. La syntaxe générale d'une clause DISTINCT est la suivante -

SELECT DISTINCT fields
FROM table
[WHERE conditions];

Note - Les résultats d'une instruction avec une clause DISTINCT -

  • Lorsque vous utilisez une expression, elle renvoie des valeurs uniques.

  • Lors de l'utilisation de plusieurs expressions, il renvoie des combinaisons uniques.

  • Il n'ignore pas les valeurs NULL; ainsi, les résultats contiennent également des valeurs NULL comme valeurs uniques.

Passez en revue l'instruction suivante en utilisant une clause DISTINCT pour une seule expression -

SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';

Examinez l'exemple suivant en utilisant plusieurs expressions -

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

Utilisation de INSERT IGNORE

Une instruction INSERT IGNORE demande à MariaDB d'annuler l'insertion lors de la découverte d'un enregistrement dupliqué. Passez en revue un exemple de son utilisation ci-dessous -

mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
   VALUES( 'Lex', 'Luther');

Notez également la logique derrière les doublons. Certaines tables nécessitent des doublons en fonction de la nature de ces données de table. Tenez compte de ce besoin dans votre stratégie de gestion des enregistrements en double.