2016-06-28 137 views
0

我正面臨一個奇怪的行爲,關於在氧化eshop 4.7中更新表oxseo重複鍵入'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'`

然而,尋找使用phpMyAdmin的整個表中的字符串8e4b0ac7[...]當沒有返回行。儘管我已經手動檢查使用

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

等等。

任何人都有一個想法可能是什麼原因?

+0

爲什麼你設置UNIQUE鍵上提交OXIDENT –

+0

@DhavalBhavsar謝謝你的回答。它由OXID eShop開發人員定義。我對此沒有影響。儘管如此,至少部分回答你的問題:'OXIDENT'是'OXSEOURL'的md5散列,它以某種方式標識記錄/ seo網址。 – AMartinNo1

+0

爲什麼我得到一個downvote?誰這樣做,我做錯了什麼? – AMartinNo1

回答

2

這很簡單。不管更新語句試圖做什麼,都將使表格處於PRIMARY鍵中具有重複條目(2行或更多行)的狀態,如從show create table oxseo的輸出中所見。

該PRIMARY鍵可能位於單個列上,也可能是複合(多列)鍵。

數據庫引擎禁止它,因爲模式禁止它。

+1

就是這一點。我已經擴展了'update'語句。 'UPDATE oxseo SET OXIDENT ='[...]',OXSEOURL ='[...]'WHERE OXOBJECTID ='[...]'AND OXSTDURL ='[...]'AND OXSEOURL ='[.. 。]''它現在有效。 – AMartinNo1

相關問題