我在MySQL中使用InnoDB并使用PDO从PHP访问表。
我需要锁定表,执行选择然后,根据结果是否插入行。由于我希望将表锁定的时间尽可能短,我可以这样做吗?
prepare select
prepare insert
begin transaction
lock table
execute select
if reservation time is available then execute insert
unlock table
commit
或者准备工作必须在交易中吗?或者他们必须在锁定之后?
交易是否应仅包含插入内容,还是会产生任何差异?
答案 0 :(得分:1)
beginTransaction
关闭自动提交模式,因此它只会影响实际提交更改的查询。这意味着准备好的语句SELECT
甚至LOCK TABLES
完全不受事务的影响。事实上,如果你只做一个INSERT
,甚至不需要使用交易;如果你想原子地做多个写查询,你只需要使用它们。