mysql – 单个查询中的SELECT和UPDATE,同时仅更新重复记录的选择性字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 单个查询中的SELECT和UPDATE,同时仅更新重复记录的选择性字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2340字,纯文字阅读大概需要4分钟。
内容图文
我有一个名为Contacts_table的MySQL表,例如,以下内容:
ID NUMBER NAME CITY
001 2222222222 John Doe Los Angeles
002 3333333333 Rich Malfoy Houston
003 4444444444 Harry Potter New York
004 5555555555 Billy Bones Boston
005 6666666666 Joe Sanders Chicago
* ID:主键;自动递增
*号码:唯一键
我使用PHP来读取这些字段的逗号分隔文本转储值,解析这些值,并将它们添加到表中.比如说,示例文本转储具有以下内容(为清楚起见,此处显示为表格):
NUMBER NAME CITY
1234567892 Earl Grey Salem
3333333333 Rich Malfoy Sacramento
7656453248 Bill Gates New York
5555555555 James McGill Boston
6666666666 NULL Baton Rouge
现在,正如您所看到的,我的TXT中有一些条目(基于NUMBER)在我的表中不存在,即第2,第4和第5条记录.然后还有其他已经在表中具有相应条目但在其他字段上可能具有不同值的其他条目.我希望我的代码做的是更新新条目(在此示例中使用NUMBER值3333333333,5555555555和6666666666).对于其他条目,代码只会更新TXT转储具有非NULL值的字段.因此,这是更新的表格的样子:
ID NUMBER NAME CITY
001 2222222222 John Doe Los Angeles
002 3333333333 Rich Malfoy Sacramento
003 4444444444 Harry Potter New York
004 5555555555 James McGill Boston
005 6666666666 Joe Sanders Baton Rouge
006 1234567892 Earl Grey Salem
007 7656453248 Bill Gates New York
就像我说的那样,只要有现有条目,就必须检查字段的值,并且只更新那些在相应TXT转储中具有非NULL值的记录的字段.
我有一大堆INSERT ON DUPLICATE KEY UPDATE查询(基本上,一个用于TXT转储中的每个条目),如果转储包含数百条记录,这将是很多.有没有办法构建单个查询来在单个事务中处理此任务?
解决方法:
由于数字上有唯一的约束/索引,因此可以使用ON DUPLICATE KEY UPDATE语法 – 可以与INSERT … VALUES结合使用,以便在一个语句中插入/更新所有行.使用COALESCE()函数可以满足新的空值不更新现有值的额外要求.例:
INSERT INTO Contacts
(number, name, city)
VALUES
(1234567892, 'Earl Grey', 'Salem'),
(3333333333, 'Rich Malfoy', 'Sacramento'),
(7656453248, 'Bill Gates', 'New York'),
(5555555555, 'James McGill', 'Boston'),
(6666666666, NULL, 'Baton Rouge')
ON DUPLICATE KEY UPDATE
name = COALESCE(VALUES(name), name),
city = COALESCE(VALUES(city), city) ;
在SQLfiddle测试
内容总结
以上是互联网集市为您收集整理的mysql – 单个查询中的SELECT和UPDATE,同时仅更新重复记录的选择性字段全部内容,希望文章能够帮你解决mysql – 单个查询中的SELECT和UPDATE,同时仅更新重复记录的选择性字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。