Heim >Datenbank >MySQL-Tutorial >Wie verhindert man doppelte Einträge in MySQL-Tabellen mithilfe von Triggern?

Wie verhindert man doppelte Einträge in MySQL-Tabellen mithilfe von Triggern?

DDD
DDDOriginal
2024-12-16 07:48:10963Durchsuche

How to Prevent Duplicate Entries in MySQL Tables Using Triggers?

So gehen Sie mit doppelten Einträgen in MySQL-Triggern um

Hintergrund:
In diesem Szenario besteht das Ziel darin, sicherzustellen, dass Kombinationen eindeutig sind URLs und Parameterzeichenfolgen wahren die Einzigartigkeit in einer MySQL-Tabelle. Die Länge der Parameterzeichenfolge überschreitet jedoch die Schlüssellängenbeschränkung für MySQL, wodurch die Verwendung eindeutiger Schlüsselbeschränkungen verhindert wird.

Trigger-Implementierung:

Um dieses Problem zu beheben, können Trigger verwendet werden eingesetzt werden, um die Eindeutigkeitsbeschränkung durchzusetzen. Der Auslösercode prüft auf doppelte Einträge, bevor er den Einfügevorgang zulässt.

Umgang mit doppelten Einträgen:

Der Auslösercode enthält zwei kritische Teile:

  1. Ausnahme für C# abbrechen/auslösen:
    Um eine Ausnahme auszulösen, wenn a Wenn ein doppelter Eintrag erkannt wird, kann der folgende Code hinzugefügt werden:

    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Duplicate entry detected';
  2. Einfügung zulassen:
    Wenn kein Duplikat vorhanden ist, wird der Einfügevorgang durch Verlassen von ELSE zugelassen Block leer.

Verbesserte Lösung:

Eine fortgeschrittenere Die Lösung nutzt die SIGNAL-Funktion von MySQL, die benutzerdefinierte Fehlermeldungen und abgefangene Ausnahmen ermöglicht. Dieser Ansatz wird im bereitgestellten Code beschrieben:

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$$

Diese Methode gibt eine benutzerdefinierte Fehlermeldung zurück, die im C#-Code abgefangen und behandelt werden kann.

Das obige ist der detaillierte Inhalt vonWie verhindert man doppelte Einträge in MySQL-Tabellen mithilfe von Triggern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn