2016-06-28 3 views
0

Я столкнулся с странным поведением относительно обновления таблицы oxseo в окислителе eshop 4.7.Повторяющаяся запись [...] для ключа «PRIMARY»

Таблица oxseo имеет следующую схему:

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

и имеет первичный (, что это также имя_раздела) ключ на полях:

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

и я пытаюсь выполнить следующий SQL (заменили реальные значения фиктивными данными) через оболочку linux:

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

что приводит к ошибке:

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

Однако при поиске строки 8e4b0ac7[...] во всей таблице, используя PhpMyAdmin нет строки, возвращенной. Несмотря на это, я проверил вручную, используя

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

и так далее.

У кого-нибудь есть идея, что может быть причиной?

+0

Почему вы установили UNIQUE-ключ на поданный OXIDENT –

+0

@DhavalBhavsar Спасибо за ваш задний вопрос. Он определяется разработчиками OXID eShop. Я не влияю на это. Несмотря на это, чтобы ответить на ваш вопрос хотя бы частично: 'OXIDENT' является хешем md5' OXSEOURL', который каким-то образом идентифицирует запись/seo url. – AMartinNo1

+0

Почему я получил нижний план? Кто бы это сделал, что я сделал не так? – AMartinNo1

ответ

2

Это очень просто. Независимо от того, что пытается сделать этот оператор обновления, вы оставите таблицу в состоянии с повторяющимися записями (2 или более строк) в ключе PRIMARY, как показано на выходе от show create table oxseo.

Этот ключ PRIMARY может находиться в одном столбце или может быть составным (многоколоночным) ключом.

Двигатель db запрещает его, поскольку схема запрещает его.

+1

В этом суть. Я расширил инструкцию 'update'. 'UPDATE oxseo SET OXIDENT = '[...]', OXSEOURL = '[...]' WHERE OXOBJECTID = '[...]' AND OXSTDURL = '[...]' AND OXSEOURL = '[.. .] «Это работает сейчас. – AMartinNo1

Смежные вопросы