在MySQL上有条件地提交事务,无需存储过程

在MySQL上有条件地提交事务,无需存储过程,mysql,Mysql,我发现IF ELSE END IF只在存储过程中受支持 MySQL supports the IF, CASE, ITERATE, LEAVE LOOP, WHILE, and REPEAT constructs for flow control within **stored programs**. 我们尝试过,但似乎不支持通过cli运行批处理语句 为了优化性能并减少往返,不考虑应用程序读取行计数()。如果mysql能够以光速运行,那将是最好的选择 如何在不使用任何附加存储过程的情况下使其工

我发现IF ELSE END IF只在存储过程中受支持

MySQL supports the IF, CASE, ITERATE, LEAVE LOOP, WHILE, and REPEAT constructs for flow control within **stored programs**.
我们尝试过,但似乎不支持通过cli运行批处理语句

为了优化性能并减少往返,不考虑应用程序读取行计数()。如果mysql能够以光速运行,那将是最好的选择

如何在不使用任何附加存储过程的情况下使其工作?我们尝试在每次更新时使用WHERE ROW_COUNT()来挂起更新链(如果任何一个更新出错);但即使不需要修改任何内容,它也不会停止事务

编辑:

简言之,我该怎么办

START TRANSACTION
UPDATE `table_a` SET a=1 WHERE id=1 AND addition=2;
UPDATE `table_b` SET a=1 WHERE id=1 AND another_rule=3;
IF UPDATE_COUNT() = 1 
THEN 
  COMMIT
ELSE
  ROLLBACK
END IF

在crond计划中,不使用存储过程。

我认为,如果没有存储过程,您想做的事情是不可能的。为什么您不喜欢使用存储过程?我唯一能想到的另一种方法是使用一个暂存表,它可以修剪重复项,然后一步完成提交


Malks.

如果您不想使用存储过程,可以采取变通办法。这对我来说很好

设置自动提交=0
更新表a集合a=1,其中id=1,addition=2
updatetable_b SET a=1,其中id=1,另一个_规则=3
SET autocommit=IF(UPDATE_COUNT()=1,1,2)

自动提交将设置为
2
,如果不是
UPDATE\u COUNT()=1
,这将引发异常
变量“autocommit”不能设置为值“2”


处理此异常并执行
回滚

您试图做的事情一点也不清楚,请重新措辞/详细说明。