Warum erhalte ich "ERROR 1062 (23000): Duplicate entry '4289' for key 1" auf ein update?
Diese Frage gestellt wurde in einer Reihe von verschiedenen Geschmacksrichtungen vor, aber die Antworten geliefert, in diesen Fällen also nicht zu nahe zu kommen, um mir zu helfen mein problem zu lösen.
Läuft die MySQL-version "5.0.41-community-log-MySQL Community Edition (GPL)"
Die Tabelle in der Frage beschrieben wird, wie diese (ich habe entfernt die meisten der Tabellen-definition für business-Gründen):
Field Type Null Key Default Extra
--------- ------------ ------- ------ ---------- --------------
id bigint(20) NO PRI (null) auto_increment
...
extracted tinyint(1) YES (null)
Wenn ich das update-SQL-Anweisung:
UPDATE transaction_tbl SET extracted = 1 WHERE id = 4289
Bekomme ich die Fehlermeldung:
ERROR 1062 (23000): Duplicate entry '4289' for key 1
Ausführung dieses select-Anweisung:
SELECT id, extracted FROM transaction_tbl WHERE id BETWEEN 4288 AND 4290
produziert dies:
id extracted
----- ------------
4288 0
4289 0
4290 0
Habe ich gelesen, die an Orten über die Verwendung der REPARATUR auf dem Tisch, aber erhielt eine Antwort, dass "Die Speicher-engine für die Tabelle unterstützt keine Reparatur"
Ich bin ein bisschen ein Verlust. Wenn jemand kann mir helfen. Ich Liebe es, zu wissen, wie man dieses Problem beheben in einer Weise, die nicht von mir verlangen, Daten zu zerstören.
Finden Sie den trigger mit
SHOW TRIGGERS LIKE 'transaction_tbl'
Es gibt einen, aber wir wurden immer diese Fehlermeldung auf und ab, da, bevor der trigger erstellt wurde. Ich sollte erwähnt haben, dass in der Frage.
OK es ist ein weiterer Auslöser, dass ich nicht bewusst war 🙂 von Euch schreiben wollen, bis die Antwort?
Wenn es nur geschieht, um diesen Datensatz löschen und neu zu erstellen, aufnehmen, bis keine Zeilen betroffen sind mehr.
DELETE FROM transaction_tbl WHERE id = 4289
. Wenn das nicht hilft, vielleicht die Wiederherstellung des PK (+ index).InformationsquelleAutor Ron Tuffin | 2011-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie erwähnt von @rabudde und @Eljakim in den Kommentaren die Frage, dieses problem war in meinem Fall, verursacht durch die Aktionen der trigger.
Auslöser war der Versuch zum einfügen eines Datensatzes in eine andere Tabelle und das einfügen wurde scheitern, weil ein doppelter Schlüssel Ausgabe.
verwenden
SHOW TRIGGERS LIKE 'transaction_tbl'
(in meinem Fall) um alle Trigger handeln auf den Tisch und von dort ist es ein bisschen Fußarbeit zu entdecken, die trigger schlecht.Letztendlich musste ich den trigger ändern, nur das einfügen in dem Fall, wo Sie Datensatz wurde nicht in der Ziel-Tabelle und ein update zu tun, wenn er da war.
InformationsquelleAutor Ron Tuffin
Es diese Tabelle ist Innodb-Sie können nicht reparieren(nur für MyIsam).
Recover InnoDb-Tabelle, die Sie sollten ausführen
oder starten Sie Ihren server neu.
Zur überprüfung der status der Tabelle zu nutzen versuchen:
InformationsquelleAutor Andrej Ludinovskov