当php代码没有达到release-mysql-lock阶段时,会发生以下情况:
- 如果当前连接的MySQL事务没有提交,那么该事务会一直等待,直到达到release-mysql-lock阶段或者超时。
- 如果当前连接的MySQL事务已经提交,那么该事务会立即返回成功,而不会等待达到release-mysql-lock阶段。
- 如果当前连接的MySQL事务已经提交,但是该事务中的其他语句执行失败,那么该事务会立即返回失败,而不会等待达到release-mysql-lock阶段。
- 如果当前连接的MySQL事务已经提交,但是该事务中的其他语句执行成功,但是该事务的提交操作失败,那么该事务会立即返回失败,而不会等待达到release-mysql-lock阶段。
- 如果当前连接的MySQL事务已经提交,但是该事务中的其他语句执行成功,但是该事务的回滚操作失败,那么该事务会立即返回失败,而不会等待达到release-mysql-lock阶段。
- 如果当前连接的MySQL事务已经提交,但是该事务中的其他语句执行成功,但是该事务的回滚操作成功,那么该事务会立即返回成功,而不会等待达到release-mysql-lock阶段。
- 如果当前连接的MySQL事务已经提交,但是该事务中的其他语句执行失败,但是该事务的回滚操作成功,那么该事务会立即返回成功,而不会等待达到release-mysql-lock阶段。
- 如果当前连接的MySQL事务已经提交,但是该事务中的其他语句执行失败,但是该事务的回滚操作失败,那么该事务会立即返回失败,而不会等待达到release-mysql-lock阶段。
- 如果当前连接的MySQL事务已经提交,但是该事务中的其他语句执行成功,但是该事务的回滚操作失败,那么该事务会立即返回失败,而不会等待达到release-mysql-lock阶段。
- 如果当前连接的MySQL事务已经提交,但是该事务中的其他语句执行成功,但是该事务的回滚操作成功,那么该事务会立即返回成功,而不会等待达到release-mysql-lock阶段。
以上情况都是基于MySQL的默认配置,如果MySQL的配置文件中的
innodb_deadlock_detect
选项设置为ON
,那么当发生死锁时,MySQL会强制回滚其中一个事务,以保证数据的一致性。