mysql-使用字符串替换进行更新时是否应添加WHERE子句
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-使用字符串替换进行更新时是否应添加WHERE子句,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1329字,纯文字阅读大概需要2分钟。
内容图文
![mysql-使用字符串替换进行更新时是否应添加WHERE子句](/upload/InfoBanner/zyjiaocheng/882/b1e889234eb44745be532d5da75b6b2a.jpg)
我想在整个列上执行字符串替换,将一个短语的所有实例更改为另一个:
UPDATE `some_records`
SET `some_column` = REPLACE(`some_column`, 'foo', 'bar');
由于许多行不包含字符串“ foo”,因此它们不受此查询的影响,这很好.我只关心包含它的行.我的问题是,是否有任何理由添加WHERE子句以显式定位将受影响的行?例如
UPDATE `some_records`
SET `some_column` = REPLACE(`some_column`, 'foo', 'bar')
WHERE `some_column` LIKE '%foo%';
据我所知,这两个查询具有完全相同的效果.第二版有什么优势吗?它提供更好的性能还是其他好处?到目前为止,我还没有找到文档说一个比另一个更好.
解决方法:
如果在表上定义了一个BEFORE / AFTER UPDATE触发器,则查询的区别在于是针对表中的所有行还是仅满足WHERE子句中谓词的行都触发该触发器.
否则,在MySQL中,这两个查询是等效的.如果分配给该列的值与该列中已有的值相同,则MySQL不会将某行视为(或报告)“受UPDATE影响”. (其他关系数据库的确将此类行计入“受影响的”计数中.
由于LIKE比较中的前导百分号,因此需要针对表中的每一行评估该条件,因此性能不会有任何差异.如果some_records(some_column)上有一个索引,MySQL可能会选择对整个索引进行扫描,这在某些情况下可能会稍快一些.)
如果您熟悉其他关系数据库(Oracle,SQL Server等),那么添加WHERE子句是第二自然.
除了这些问题之外,是否添加WHERE子句并不重要.
我讨厌添加WHERE子句可以看到的原因:
>避免在更新之前/之后触发触发器
>其他关系数据库中使用的熟悉模式
>可能会改善性能(如果行确实很长,如果索引很多,更短,并且只有一小部分行将满足条件)
内容总结
以上是互联网集市为您收集整理的mysql-使用字符串替换进行更新时是否应添加WHERE子句全部内容,希望文章能够帮你解决mysql-使用字符串替换进行更新时是否应添加WHERE子句所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。