Maison >base de données >tutoriel mysql >Comment éviter les entrées en double dans les tables MySQL à l'aide de déclencheurs ?

Comment éviter les entrées en double dans les tables MySQL à l'aide de déclencheurs ?

DDD
DDDoriginal
2024-12-16 07:48:10961parcourir

How to Prevent Duplicate Entries in MySQL Tables Using Triggers?

Comment gérer les entrées en double dans les déclencheurs MySQL

Contexte :
Dans ce scénario, l'objectif est de garantir que les combinaisons d'éléments uniques Les URL et les chaînes de paramètres conservent leur unicité dans une table MySQL. Cependant, la longueur de la chaîne de paramètres dépasse la limite de longueur de clé pour MySQL, empêchant l'utilisation de contraintes de clé uniques.

Implémentation du déclencheur :

Pour résoudre ce problème, les déclencheurs peuvent être utilisé pour appliquer la contrainte d’unicité. Le code de déclenchement vérifie les entrées en double avant d'autoriser l'opération d'insertion.

Gestion des entrées en double :

Le code de déclenchement comprend deux parties critiques :

  1. Abandonner/Raise Exception en C# :
    Pour lever une exception lorsque une entrée en double est détectée, le code suivant peut être ajouté :

    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Duplicate entry detected';
  2. Autoriser l'insertion :
    Si aucun doublon n'existe, l'opération d'insertion est autorisée en laissant le ELSE bloc vide.

Solution améliorée :

Un plus La solution avancée utilise la fonction SIGNAL de MySQL, qui permet des messages d'erreur personnalisés et des exceptions piégées. Cette approche est décrite dans le code fourni :

CREATE TRIGGER `TestTable_SomeTrigger`
BEFORE UPDATE ON `test_table`
FOR EACH ROW
BEGIN
    DECLARE msg VARCHAR(255);
    IF (SomeTestToFail = "FAIL!") THEN
        set msg = "DIE: You broke the rules... I will now Smite you, hold still...";
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg;
    END IF;

    -- Do any other code here you may want to occur if it's all OK or leave blank it will be
    --  skipped if the above if is true
END$$

Cette méthode renvoie un message d'erreur personnalisé qui peut être intercepté et géré dans le code C#.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn