Duplizieren Sie den Eintrag für den Schlüssel 'PRIMARY' in mysql

8

Ich habe eine Tabelle mit dem Namen tbl_jobs , die die Metadaten einiger Hintergrundjobs speichert, die in der Anwendung ausgeführt werden. Das Schema ist wie folgt:

%Vor%

Immer wenn ein Job ausgeführt wird, wird ein Eintrag in der Tabelle mit dem type erstellt, der eine eindeutige ID für verschiedene Jobs ist, run time und records updated in diesem Lauf.

Es gibt zwei verschiedene Jobs, die gleichzeitig mit Typen ausgeführt werden: MAILER_UNLOCKED_REWARDS und MAILER_ALMOST_UNLOCKED .

Wenn diese Jobs versuchen, ihre Einträge mit demselben Zeitstempel einzufügen, wird nur einer von ihnen eingefügt und der andere löst einen doppelten Eintrag für Schlüssel aus.

Zum Beispiel liefen die beiden Jobs wie folgt:

%Vor%

das erfolgreich ausgeführt wurde, aber wenn der zweite Job den Einfügebefehl

ausgeführt hat %Vor%

Es hat den Fehler

ausgelöst %Vor%

Der Primärschlüssel besteht aus den Spalten type und last_run_on .

Wenn ich den Eintrag für den ersten Job lösche, ist die Einfügung erfolgreich, d. h. es wird verlangt, dass timestamp allein eindeutig ist.

Der Konflikt für den gleichen timestamp tritt jedoch nur zwischen diesen beiden Jobs auf. Es gibt andere Jobs, die für dasselbe timestamp eingefügt werden.

Irgendwelche Ideen, was könnte das Problem sein?

    
mickeymoon 22.08.2012, 14:32
quelle

3 Antworten

4

Verwenden Sie das ganze Feld "Typ" in Ihrem Index? Oder nur das erste Zeichen? Weil der Schlüssel, über den sich MySQL beklagt,

ist %Vor%

anstelle von MAILER _...

Versuchen Sie zu laufen:

%Vor%

Es sollte etwas geben wie:

%Vor%

...

und ich vermute, dass stattdessen "1" in der Sub_part-Spalte des PRIMARY-Index angezeigt wird:

%Vor%

...

BTW, der Primärschlüssel ist immer eindeutig, daher ist der zweite Index index2 , den Sie deklarieren, redundant.

    
LSerni 22.08.2012, 14:41
quelle
0

Die erste Sache: Sie müssen sicherstellen, dass Sie PRIMARY KEY AUTO_INCREMENT gesetzt wurde. Die zweite Sache: Sie aktivieren Auto-Inkrement einfach durch:      ALTER TABLE [Tabellenname] AUTO_INCREMENT = 1 Die dritte Sache: Wenn Sie den Befehl zum Einfügen ausführen, müssen Sie diesen Schlüssel überspringen.

    
Đoàn Nhật Duẩn 04.02.2016 01:16
quelle
0

Ich habe diesen Fehler gesehen, wenn ich ein System heruntergefahren oder ein Netzwerkproblem habe. Sie haben wirklich kein Duplikat in Ihrer Datenbank. Das ist ein MySQL-Datenbankfehler. Alles, was Sie tun müssen, ist: Wenn Sie Ihre Insertion machen und es nicht true ist, ändern Sie einfach eine der Spalten Ihrer Tabelle, die Sie einfügen wollen, entweder von varchar bis text oder bigint und wiederholen dann die Einfügung. Das löst das Problem.

%Vor%     
Casey 15.03.2016 17:55
quelle

Tags und Links