我有一张多行的table。有些人有田 request_path
像这样的人物 .html.html
以及其他不同性格的人。我要删除所有 .html.html
让他们单身 .html
. 我正在尝试下面的命令-
UPDATE url_rewrite
SET request_path = CONCAT(LEFT(request_path, CHAR_LENGTH(request_path) -10), '.html')
WHERE request_path LIKE '%.html.html';
但它给出了以下错误-
# 1062 - Duplicate entry 'test/test.html-1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID'
如果我删除了这个条目,那么它开始给其他一些值带来相同的错误。我无法超越这个错误。有谁能帮忙解决这个问题吗?
table的结构看起来像-
5条答案
按热度按时间vlf7wbxs1#
通过更新表,您试图创建重复的值,因为它违反了表的键和约束。
您必须检查url\u rewrite表中的键,并确保您选择作为键的列没有重复的值。
更新:
在phpmyadmin中,转到url\u rewrite表结构,在列下面有一个“indexes”按钮,单击它您将看到request\u path列的索引名称。
例如,如果索引名称是request\u path\u index,则运行以下查询以删除该索引:
bvjxkvbb2#
我认为您已经在request\u path列中设置了unique key constraint,请尝试使用此查询删除此约束,然后执行下面的replace查询。
那么,
这将取代所有
'.html.html'
变成单身'.html'
如果你想你也可以用where
这里的情况。然后要再次重新指定约束,请使用以下查询:
dgtucam13#
不能在唯一属性字段中插入/更新重复值。
更改字段属性(删除唯一属性)
或者
在更新前更改请求路径值(首先检查新的请求路径是否已存在)。如果存在,请重命名它。)
根据您的要求
dsekswqp4#
我觉得你不行。
执行更新时,更新的值将成为另一个相同值的副本。这违反了表的约束,从而导致错误
2g32fytz5#
您可以尝试: