顺序执行多条sql,一条执行失败则所有都执行失败;例如第一条成功,第二条失败的话,第一条也失败!急!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序执行多条sql,一条执行失败则所有都执行失败;例如第一条成功,第二条失败的话,第一条也失败!急!相关的知识,希望对你有一定的参考价值。

都不行你们说的
你们说的方法跟mysql数据库版本和存储引擎有关系吗?我的是myisam的,用了你们的方法sql直接报错

参考技术A 这种情况只能用事务来解决,如果第一条执行成功,后面的语句执行失败的话可以用ROLLBACK来回滚,撤消先前的操作。
补充:
myISAM是非事务型引擎,不支持事务的,InnoDB是事务型引擎。
参考技术B BEGIN TRANSACTION
语句1;
语句2;
....
语句N;
COMMIT TRANSACTION
参考技术C Begin TRANSACTION
语句1;
If @@error<>0 Goto error
语句2;
If @@error<>0 Goto error

Commit TRANSACTION
Return
error:
Rollback TRANSACTION
我在MS SQL中测试过可以的,MY SQL没用过。本回答被提问者采纳

MySQL如何实现 XA 规范

一、前言  

  我们提交一个事务,里面有多条sql,mysql是如何管理事务的呢?是如何做到其中一条sql执行失败,全部回滚的呢?

二、XA事务

  XA协议是基于二阶段提交的一个具体实现,也是分为Prepare和Commit两个阶段。

  Prepare阶段:TM(事务协调者)向所有RM(资源管理者)发送prepare指令,询问是否可以执行,RM返回可执行或不可执行。

  Commit阶段:所有RM都返回可执行,则向所有RM发送commit指令。如果有一个RM返回不可执行,则向所有RM发送rollback指令。

三、MySQL如何实现 XA 规范

  MySQL根据单机还是分布式集群分为内部XA和外部XA。

  内部XA:也就是单机的情况下,binlog充当TM(事务协调者)的角色。一个事务过来,写入redo log日志和undo log日志。事务提交时,同时写入redo log和binlog,保证redo log和binlog一致。如果事务撤销,则根据undo log进行撤销。

      外部XA:分布式集群的情况下,一般用数据库代理层来充当TM的角色,实现对事务的支持。

 

以上是关于顺序执行多条sql,一条执行失败则所有都执行失败;例如第一条成功,第二条失败的话,第一条也失败!急!的主要内容,如果未能解决你的问题,请参考以下文章

如何多条SQL语句执行?

数据库事务

MySQLi面向对象实践--multi_query

事务及事务隔离

SQL执行与优化

CTF中的命令执行绕过方式