UPDATE userTable 
SET userAge=245,userName="fred"  WHERE userId = 321,SET userAge=32,userName="dave" WHERE userId = 424;

有没有更好的方法来编写这段代码?

是的,使用案例陈述:
UPDATE userTable 
    SET userAge= (case when userId = 321 then 245 else 32 end),userName= (case when userId = 321 then 'fred' else 'dave' end)
    WHERE userId in (321,424);

但是,我认为更通用的方法是使用连接语法:

UPDATE userTable join
       (select 321 as UserId,'fred' as userName,245 as userAge union all
        select 424,'dave',32
       ) toupdate
       on userTable.userId = toupdate.UserId
    set userTable.userAge = toupdate.userAge,userTable.userName = toupdate.userName;

这样可以更轻松地添加更多行,并显示使用join with update的强大功能.

编辑:

关于表现.两个更新需要在数据库中设置两个事务;一次更新只需要一次.因此,一次更新可能会更快一点.只有在userTable(userId)上没有索引时,性能差异才会显着.使用这样的索引,两个版本(使用where子句和使用join)都应该使用索引来查找要快速更新的行.

但是,有一个更重要的区别.两次更新使表在更新之间处于不一致状态 – 用户ID和名称在这些更新之间不一致.如果第二个失败或有人使用该表,它们将具有不一致的数据.您希望同时执行这两个更新(您也可以通过使用显式事务来解决此问题,但为什么要这么麻烦?).

php – 这可以作为单个更新查询运行吗?的更多相关文章

  1. Laravel如何使用数据库事务及捕获事务失败后的异常详解

    最近在学习Laravel,在学习中遇到了不少的问题,所以想着总结记录下来,所以下面这篇文章主要给大家介绍了关于Laravel如何使用数据库事务及捕获事务失败后异常的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。

  2. php – 这可以作为单个更新查询运行吗?

    有没有更好的方法来编写这段代码?

  3. php – Magento捕获异常并回滚数据库事务

    我正在使用Magento模块,需要知道是否可以回滚一系列模型保存.基本上,我有五个模型加上几个从我的模块,我需要一个接一个地保存:我的问题是,每当这些模型抛出异常时,我需要进入MysqL并手动删除所有保存的行.这是非常无效的.我很确定Magento没有可以在我的上下文中访问的回滚过程.例如,我查看了Mage_Core_Model_Abstract,在save方法中,回滚机制都受到保护.所以,我的问

  4. php – 在Laravel中测试,setUp&tearDown不会rollBack我的数据库事务?

    我在Laravel测试中有这种疲惫的行为.让我告诉你我的测试.理想情况下,测试应该在测试结束时创建一行并删除但是没有发生,我还应该做些什么.我知道当发生一些意外的异常但是我故意在最后调用它时会调用回滚,这不应该像我们认为的那样工作吗?

  5. php – PDO事务函数与MySQL事务语句?

    PDO提供启动,提交和回滚事务的功能:有没有理由使用PDO函数而不是简单地使用MysqL中的事务语句?充分利用adozenPDOdrivers可以让您的生活更轻松的事实.如果您完全关心一致性,那么支持API而不是特定于实现的sql语法.

  6. php – MySQL存储引擎的困境

    >使用Postgresql之类的其他RDBMS,它在事务引擎中具有全文支持.

  7. php – Laravel DB ::事务没有回滚异常

    我在Laravel4.2和DB::transaction中遇到了这个小问题.我遇到了没有回滚的事务的问题,所以我尝试了最简单的代码片段并将其放入routes.PHP中进行测试:routes.PHP文件:我只是尝试在事务闭包中创建用户,并在创建用户之后抛出异常以强制回滚事务.我的问题是,即使抛出异常,事务也不会回滚.每次刷新应用程序时,我都会在数据库中获得新用户.相同的代码在本地计算机上按预期工作,但在我计划用于生产的服务器上,它只是不会回滚事务.你有什么想法吗?

  8. php – 与orm的kohana交易

    是否有可能(如何)使用kohanaORM使用mysql事务和回滚?

  9. php – Neo4j数据库在事务未关闭时被锁定

    如何使用代码或配置轻松避免或删除数据库锁?

  10. php – wordpress数据库中的交易

    WordPress正在使用MyISAM存储引擎.MyISAM不支持交易.wordpress如何维护交易?我的意思是如果wordpress有两个数据库写操作,它如何确保原子性?).一般来说,到目前为止我见过的大多数Web应用程序都不会因为事务,原子性甚至参照完整性而烦恼,这是非常可悲的.一方面令人遗憾的是,如此多的应用程序只依靠纯粹的运气而没有发生任何不好的事情,另一方面它可能会导致这样的印象:所有这些技术在数据库方面都不那么重要.

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部