mysql中表类型为innodb可以使用事务. 复杂的操作可以使用事务,一般情况不需要考虑这么精确. 比如你说的例子,需要控制的只是在checkout的时候: 首先: A: select count from product_table where pid=3333 如果count>0,表示还有商品,那么可以执行: B: update count=count-1 from product_table where pid=3333但是这样的操作有可能发生问题. 如果两个人同时访问导致sql执行顺序为A, A, B, B的情况,如果count为1,最终count会变为-1,其中一个人其实是买不到的但是仍然得到了买到的返回. 但是如果修改B为: update count=count-1 from product_table where pid=3333 and count>0 这样在第二次执行B的时候,就不会发生-1操作,同时mysql_affected_rows将会返回0, 这样就不会导致数据错误,只是第二个人会得到checkout不成功的消息.就没有问题了.
复杂的操作可以使用事务,一般情况不需要考虑这么精确.
比如你说的例子,需要控制的只是在checkout的时候:
首先:
A: select count from product_table where pid=3333
如果count>0,表示还有商品,那么可以执行:
B: update count=count-1 from product_table where pid=3333但是这样的操作有可能发生问题. 如果两个人同时访问导致sql执行顺序为A, A, B, B的情况,如果count为1,最终count会变为-1,其中一个人其实是买不到的但是仍然得到了买到的返回.
但是如果修改B为:
update count=count-1 from product_table where pid=3333 and count>0
这样在第二次执行B的时候,就不会发生-1操作,同时mysql_affected_rows将会返回0,
这样就不会导致数据错误,只是第二个人会得到checkout不成功的消息.就没有问题了.