更新mysql时出现重复错误

igetnqfo  于 2021-06-21  发布在  Mysql
关注(0)|答案(5)|浏览(492)

我有一张多行的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的结构看起来像-

vlf7wbxs

vlf7wbxs1#

通过更新表,您试图创建重复的值,因为它违反了表的键和约束。
您必须检查url\u rewrite表中的键,并确保您选择作为键的列没有重复的值。
更新:
在phpmyadmin中,转到url\u rewrite表结构,在列下面有一个“indexes”按钮,单击它您将看到request\u path列的索引名称。
例如,如果索引名称是request\u path\u index,则运行以下查询以删除该索引:

alter table url_rewrite drop index request_path_index
bvjxkvbb

bvjxkvbb2#

我认为您已经在request\u path列中设置了unique key constraint,请尝试使用此查询删除此约束,然后执行下面的replace查询。

ALTER TABLE url_rewrite DROP INDEX URL_REWRITE_REQUEST_PATH_STORE_ID;

那么,

UPDATE url_rewrite
    SET request_path = REPLACE(request_path, '.html.html', '.html')

这将取代所有 '.html.html' 变成单身 '.html' 如果你想你也可以用 where 这里的情况。
然后要再次重新指定约束,请使用以下查询:

ALTER TABLE url_rewrite add unique index URL_REWRITE_REQUEST_PATH_STORE_ID (request_path (255))
dgtucam1

dgtucam13#

不能在唯一属性字段中插入/更新重复值。
更改字段属性(删除唯一属性)
或者
在更新前更改请求路径值(首先检查新的请求路径是否已存在)。如果存在,请重命名它。)
根据您的要求

dsekswqp

dsekswqp4#

我觉得你不行。
执行更新时,更新的值将成为另一个相同值的副本。这违反了表的约束,从而导致错误

2g32fytz

2g32fytz5#

您可以尝试:

UPDATE url_rewrite 
SET request_path = REPLACE(request_path , '.html.html', '.html')
WHERE request_path LIKE ('%.html.html');

相关问题