php mysql事务回滚

关于mysql事务回滚,若涉及多条语句的执行,怎么进行回滚呢?
例如:

线上下单,首先新增一张订单,然后再插入若干条商品数据,接着对商品库存进行扣减,这些一系列的操作的,如果当中一条sql执行失败,如何进行事务回滚比较好?
阅读 4.2k
5 个回答
try
{
    begin
    
    create order
    
    create order item
    create order item
    
    update stock
    update stock
    
    commit
}
catch(\Exception $ex)
{
    rollback
}

你是用的原生的php,还是框架,按照上面的语法结构就可以了

如果同一数据库,按照上面的的结构就可以,如果分库的,那可能需要用消息队列去保证数据的一致性。

你开启transaction后

$mysqli -> begin_transaction ( MYSQLI_TRANS_START_READ_ONLY );

$mysqli -> query ( "SELECT XXXX" );
$mysqli -> commit ();

$mysqli -> close ();

如果成功事务开始和结束之际的所有的语句只要有一句失败整个事务就失败,如果$mysqli -> commit ();是false就

$mysqli->rollback()

至于你说的是如何回滚,因为你涉及的是物品,新增订单失败了,就让所有的都回滚。

回滚好像就一种方式吧,如果所有的语句操作成功就commit,如果有一条执行失败就rollback。innodb才能这么操作,myisam不支持事务

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题