是否有可能在mysql事务中选择和更新?

时间:2012-01-10 11:37:01

标签: php mysql transactions

我很好奇,如果这可以实现,因为我目前正面临一个错误,并希望看到在事务中放置SELECT和UPDATE是否会修复它(如果你想知道为什么我不发布导致错误的代码,因为它是一个复杂的环境,我无法发布所有影响因素。)

我对此感兴趣的东西,如果你曾经历过代码,并且在 SELECT查询后写了 UPDATE查询,那么UPDATE会在SELECT之前执行(有可能脚本可能会运行两次排除。)

1 个答案:

答案 0 :(得分:3)

这取决于交易的含义。 有两种类型的交易:

  • 隐含的transactons:,如INSERTUPDATESELECTDELETE语句,并且在此类语句中没有显式的事务命令如果发生错误,数据库引擎将回滚整个语句。
  • 交易中的所有随附陈述中的
  • Explicit Transactions:作为一个单元执行,COMMIT整个交易或ROLLBACK

因此,您不能在一个查询中同时拥有SELECTUPDATE,但您可以在以下事务中使用它们:

START TRANSACTION;
   SELECT * FROM tableName;
   UPDATE table SET something = 'other something' WHERE thirdsomething = @s;
COMMIT;

然后将它们放入存储过程或UDF中。

请注意: SELECT语句不会修改数据,因此您可能不需要将其包含在事务中,因此在您的情况下,您将只有UPDATE语句你可以在没有交易的情况下使用存储过程。