更新mysql时出现重复错误

更新mysql时出现重复错误,mysql,sql,database,string,str-replace,Mysql,Sql,Database,String,Str Replace,我有一张多行的桌子。有些字段request\u 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'; 但它给出了

我有一张多行的桌子。有些字段
request\u 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'
如果我删除了这个条目,那么它开始对其他一些值给出相同的错误。我无法超越这个错误。有人能帮忙解决这个问题吗

桌子的结构看起来像-


通过更新表,您试图创建重复值,因为它违反了表的键和约束

您必须检查url\u rewrite表中的,并确保选择作为键的列不存在重复值

更新:

在phpmyadmin中,转到url_rewrite表结构,在列下面有一个“index”按钮,单击它,您将看到request_path列的索引名称

例如,如果索引名为请求路径\u索引,请运行以下查询以删除该索引:

alter table url_rewrite drop index request_path_index

通过更新表,您试图创建重复值,因为它违反了表的键和约束

您必须检查url\u rewrite表中的,并确保选择作为键的列不存在重复值

更新:

在phpmyadmin中,转到url_rewrite表结构,在列下面有一个“index”按钮,单击它,您将看到request_path列的索引名称

例如,如果索引名为请求路径\u索引,请运行以下查询以删除该索引:

alter table url_rewrite drop index request_path_index

我想你做不到


执行更新时,更新的值将成为另一个相同值的副本。这违反了表的约束,所以出现了错误,我认为您不能


执行更新时,更新的值将成为另一个相同值的副本。这违反了表的约束,因此出现错误

我认为您已在请求路径列中设置了唯一键约束。请尝试使用此查询删除此约束,然后执行以下替换查询

ALTER TABLE url_rewrite DROP INDEX URL_REWRITE_REQUEST_PATH_STORE_ID;
那么

这将把所有
'.html.html'
替换为单个
'.html'
,如果您愿意,也可以在此处使用
where
条件

然后,要重新指定约束,请使用以下查询:

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

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

ALTER TABLE url_rewrite DROP INDEX URL_REWRITE_REQUEST_PATH_STORE_ID;
那么

这将把所有
'.html.html'
替换为单个
'.html'
,如果您愿意,也可以在此处使用
where
条件

然后,要重新指定约束,请使用以下查询:

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

无法将重复值插入/更新到唯一属性字段中

您可以更改字段属性(删除唯一属性)

更新前更改请求路径值 (首先检查新请求路径是否已存在。如果存在,请重命名它。)


根据您的要求

您不能在唯一属性字段中插入/更新重复值

您可以更改字段属性(删除唯一属性)

更新前更改请求路径值 (首先检查新请求路径是否已存在。如果存在,请重命名它。)

根据您的要求,您可以尝试:

UPDATE url_rewrite 
SET request_path = REPLACE(request_path , '.html.html', '.html')
WHERE request_path LIKE ('%.html.html');
您可以尝试:

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


您建议怎么做?根据您的表结构,request_path列被设置为具有唯一的值,这就是为什么在更新后两个记录具有相同的request_path值时出现错误的原因。如果此列的值不应该是唯一的,只需删除唯一约束即可。您可以通过查询分享如何实现此操作吗?1091-无法删除“请求路径”;检查列/键是否存在此错误,然后在您的情况下,索引名与列名不同。请在phpmyadmin中转到url_重写表结构,在列下有一个“indexes”按钮,单击它您将看到request_path列的索引名称,在查询中使用索引名称而不是request_path。您建议如何做?根据您的表结构,request_path列被设置为具有唯一值,这就是为什么在更新后两个记录具有相同的request_path值时出现错误的原因。如果此列的值不应该是唯一的,只需删除唯一约束即可。您可以通过查询分享如何实现此操作吗?1091-无法删除“请求路径”;检查列/键是否存在此错误,然后在您的情况下,索引名与列名不同。请在phpmyadmin中转到url_重写表结构,在列下有一个“indexes”按钮,单击它您将看到请求路径列的索引名称,在查询中使用索引名称而不是请求路径。请检查请求路径中的“test/test.html-1”。另外,请检查请求路径字段是否设置为唯一。是否存在该字段。请检查“test/test.html-1”是否位于请求路径中的某个位置。同时检查请求路径字段是否设置为唯一。是否存在该字段。是否有其他方法来执行此操作?我只想将表中所有行的.html.html字符串替换为.html。。。也许您可以编辑您的问题并包括表结构更新了问题,请检查是否有帮助如果可以,您可以尝试删除“请求路径”列的键。。但不是r