如何使用SQL错误处理(删除行)(1062):MySQL中UNIQUE列上的重复条目

时间:2014-05-30 12:55:22

标签: mysql

让我们说我有一个声明为UNIQUE的列,上面填充了人名:

Mary
John
Michel
&Mary
Kevin

我想从name列中删除一些字符,因此我运行如下查询:

UPDATE db_name SET name = replace(name, '&', '')

但是这个查询将失败:

  

SQL错误(1062):重复输入' Mary'关键字'名称'

有没有办法删除行'& Mary'只有' Mary'存在?

3 个答案:

答案 0 :(得分:0)

如果存在name ='Mary'

的字段,则此查询将删除行'& Mary'
delete from db_name 
where name= '&Mary' AND 
EXISTS(
       select 1 from db_name 
       where name = 'Mary'
       )

答案 1 :(得分:0)

在表格上使用INNER JOIN&连接到每个名称的前面,您可以执行标识和删除匹配的DELETE。删除后,可以安全地按照您最初的预期在replace(name, '&', '')查询中运行UPDATE

/* names_amp is an alias of the same table */
DELETE names_amp FROM names names_amp
  /* the joining condition adds an '&' to the everything in the main table
     in order to find those which match */
  JOIN names ON CONCAT('&', names.name) = names_amp.name

这里有效:http://sqlfiddle.com/#!2/5832d/1

如果您不想将其应用于所有人,并且只想'Mary',则只需添加WHERE条款:

DELETE names_amp FROM names names_amp
  JOIN names ON CONCAT('&', names.name) = names_amp.name
WHERE names.name = 'Mary'

使用联接删除的正确语法是explained in the MySQL DELETE syntax reference

答案 2 :(得分:0)

您可以在ON DUPLICATE KEY期间使用UPDATE语法(假设您使用的是MySQL)。

使用UPDATE IGNORE

下面你可能会发现一个有用的技巧:

http://leo.steamr.com/2011/09/mysql-update-on-duplicate-key-delete-work-around/