mysql语句的执行效率 update数据

易轩 发布于 2012/11/01 11:20
阅读 1K+
收藏 0
买家购买商品的时候,需要扣除会员的费用,两种方式哪一个更好呢?

1.根据商品编号,先在商品数据表查询出对应的价格 select `goods_price` from `goods` where `goods_id` = ‘8888’ 
用变量表示出价格 $price = $result['goods_price'];
然后利用UPDATE `member` SET `member_balance` = member_balance - $price WHERE `member_id`= ‘qinhaiyan’扣费
这样的话会,执行两个mysql_query

2.用这样的sql执行扣费,直接把商品的价格用sql语句表示出来
UPDATE `member` SET `member_balance` = member_balance - (select `goods_price` from `good` WHERE `goods_id`='8888') WHERE `member`.`member_id` ='qinhaiyan'
我试验了下,这样也能执行成功,不知道是不是符合标准。

请问大家,那一种方法好一些,如果我的写的不标准的话,应该怎么写呢?感激不尽!!
加载中
0
luobin
luobin
我也关注这个问题,个人觉得用sql来进行业务流程里的操作(比如扣费)不是较好的设计,把这部分代码的工作放到后台去做较好,sql只进行数据的简单修改
luobin
luobin
回复 @易轩 : 效率确实低了,但是可以更自由地应对业务,如果效率实在太重要,可以参考存储过程
易轩
易轩
两次数据访问,这样的执行效率是不是会低呢?
0
mark35
mark35
第二条SQL是用标准子查询来更新。没问题的,但你要考虑到子查询无返回值或者返回null的情况
0
八宝旗
八宝旗

可以把第一种使用的两个sql操作放在存储过程里面,业务只需要执行一次调用存储过程的mysql_query 即可。

 

八宝旗
八宝旗
回复 @易轩 : 回复内容竟然不能换行显示,凑合看吧,不好意思!
八宝旗
八宝旗
回复 @易轩 : 有点不太一样 开启事务进行1的操作:商品的价格是需要发送给client的,两个表没要求 存储过程:不需要发送给client,要求该账户拥有“商品数据”表的查询、“用户数据”的修改权限(同时两个表必须在一台mysql上) 其他的应该没什么区别了
易轩
易轩
倘若开启事务进行1的操作是不是和存储过程一样呢?
返回顶部
顶部