【问题标题】:Update MySQL table and ignore duplicate entries更新 MySQL 表并忽略重复条目
【发布时间】:2013-10-31 05:53:53
【问题描述】:

我创建了一个表,其中包含一个 UNIQUE 'mobile_no' like

09727048248
9727048248
9824578564
9898998998

然后我要检查手机号码是否有效,如果有效则我想将其更改为正确的格式,例如919727048248。

为此,我将更新查询称为..

update bccontacts 
set mobile_no='919727048248' 
where mobile_no=09727048248

第一次运行成功,第二次回复了

错误 1062 (23000):密钥“mobile_no”的重复条目“919727048248”

因为已经为“mobile_no”设置了唯一的密钥。

那么还有其他查询可以IGNORE DUPLICATE KEY ON UPDATE吗?

【问题讨论】:

标签: mysql


【解决方案1】:

使用UPDATE IGNORE:

update IGNORE bccontacts 
set mobile_no='919727048248' 
where mobile_no=09727048248

更多信息在这里:http://dev.mysql.com/doc/refman/5.0/en/update.html

【讨论】:

  • 我还会添加一个状态列,以便能够修剪重复项。 UPDATE IGNORE targetTable SET status=9, targetCol=value ; DELETE FROM targetTable WHERE status !=9;
  • 我建议不要使用 UPDATE IGNORE,因为它不安全。正如文档所说:link“UPDATE IGNORE 语句,包括那些具有 ORDER BY 子句的语句,被标记为对基于语句的复制不安全。(这是因为更新行的顺序决定了哪些行是*) 此类语句在使用 statement-based 模式时会在错误日志中产生警告,并在使用 MIXED 模式时使用 row-based 格式写入二进制日志。"
【解决方案2】:

如果您已将手机号码声明为表格中的主键,则您的表格中不能有两次相同的手机号码。看看MySQL UPDATE documentation

【讨论】:

  • 手机号码声明为 UNIQUE_KEY,我已经在我的问题中提到过。顺便说一下,我得到了另一个解决方案,请参阅下一个答案..
猜你喜欢
  • 2010-10-23
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多