【问题标题】:Does MySQL overwrite a column of same value on update?MySQL 是否会在更新时覆盖相同值的列?
【发布时间】:2016-02-12 13:47:52
【问题描述】:

在 MySQL 中更新表时,例如:

表格 user

user_id | user_name

1         John
2         Joseph
3         Juan

如果我运行查询

UPDATE `user` SET user_name = 'John' WHERE user_id = 1

MySQL 会再次写入相同的值还是忽略它,因为它是相同的内容?

【问题讨论】:

  • 如果这是关于性能的(即尝试聪明并避免这种情况有好处),这是一件好事。但我不会让应用程序代码依赖于“受影响的行”计数返回的内容。
  • 相关:stackoverflow.com/questions/13559583/…(如果可以,请也回答那个问题)

标签: mysql sql-update


【解决方案1】:

正如MySQL manual for the UPDATE statement 所暗示的那样,

如果您将列设置为其当前具有的值,MySQL 会注意到这一点 并且不更新它。

因此,如果您运行此查询,MySQL 将理解您尝试应用的值与指定列的当前值相同,并且不会向数据库写入任何内容。

【讨论】:

  • 我想知道它是否是一个很好的功能,说到性能。如果其他人希望回答提供更多详细信息,那就太好了!
  • MySQL 是否会抛出一些东西,说由于相同的值而无法更新,或者它什么也没说,因为当我尝试这个时,它返回 0 , 0 在这里意味着什么?无法更新相同的数据或什么都没做,或者如果有任何与服务器相关的问题,那么它也会返回 0 对吗?
  • 执行语句时,MySQL 将返回两个值,(last_inserted_id, rows_affected) 这就是你得到的 0,0 的意思,该语句已执行但它什么也没插入,什么也没更新
  • 当某些列的值相同时,您如何找出更新了哪些列?
  • 这种情况下的结果值0是最差的!它通过预选或预插入强制在开发中使用一些奇怪的解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多