2016-06-28 5 views
0

Ich habe ein seltsames Verhalten bezüglich der Aktualisierung der Tabelle oxseo in einem Oxid-Eshop 4.7.Doppelte Eingabe [...] für Schlüssel 'PRIMARY'

Die Tabelle oxseo hat folgendes Schema:

+------------+---------+----------+----------+----------+----------+-------+ 
| OXOBJECTID | OXIDENT | OXSHOPID | OXLANGID | OXSTDURL | OXSEOURL | [...] | 
+------------+---------+----------+----------+----------+----------+-------+ 

und hat eine primäre (, dass auch die keyname ist) auf den Feldern Schlüssel:

+---------+----------+--------+ 
| OXIDENT | OXSHOPID | OXLANG | 
+---------+----------+--------+ 

und ich versuche folgende SQL ausführen (ersetzt echte Werte mit Dummy-Daten) über die Linux-Shell:

UPDATE oxseo 
SET 
    OXIDENT = "8e4b0ac7[...]", 
    OXSEOURL = "my/seo/url/" 
WHERE 
    OXOBJECTID = "123"` 

, die zu dem Fehler führt:

ERROR 1062 (23000): Duplicate entry '8e4b0ac7[...]-oxbaseshop-0' for key 'PRIMARY'`

Wenn jedoch für die Zeichenfolge 8e4b0ac7[...] in der ganzen Tabelle schauen, um die phpMyAdmin dort verwendet, ist keine Zeile zurückgegeben. Trotzdem habe ich manuell unter Verwendung

SELECT * FROM field1 = hash 
SELECT * FROM field2 = hash 

und so weiter überprüft.

Jeder hat eine Idee, was die Ursache sein könnte?

+0

warum Sie UNIQUE Schlüssel auf archivierte OXIDENT setzen –

+0

@DhavalBhavsar Danke für Ihre Rückfrage. Es wird von den OXID eShop-Entwicklern definiert. Ich habe keinen Einfluss darauf. Trotzdem, um Ihre Frage zumindest teilweise zu beantworten: 'OXIDENT' ist ein MD5-Hash von' OXSEOURL', der die Record/SEO-URL in irgendeiner Weise identifiziert. – AMartinNo1

+0

Warum habe ich einen Downvote bekommen? Wer hat das getan, was habe ich falsch gemacht? – AMartinNo1

Antwort

2

Es ist sehr einfach. Was auch immer diese update-Anweisung versucht, würde die Tabelle in einem Zustand mit doppelten Einträgen (2 oder mehr Zeilen) im PRIMARY-Schlüssel belassen, wie in der Ausgabe von show create table oxseo zu sehen ist.

Dieser PRIMARY-Schlüssel befindet sich möglicherweise in einer einzelnen Spalte, oder er kann ein zusammengesetzter (mehrspaltiger) Schlüssel sein.

Die db-Engine verbietet es, weil das Schema es verbietet.

+1

Das ist der Punkt. Ich habe die "update" -Anweisung erweitert. 'UPDATE oxseo SET OXIDENT = '[...]', OXSEOURL = '[...]' WHERE OXOBJECTID = '[...]' UND OXSTDURL = '[...]' UND OXSEOURL = '[.. .] Es geht jetzt. – AMartinNo1