Mysql 事务如何原子给定多个连接



我检查了相关问题,答案有点"是的,非常原子"。

但是我要更具体,因为这些问题不是那么具体,所以答案:

  1. MySQL/INNODB
  2. "同一"时间的多个连接
  3. 一个事务可能写入相同的表(甚至更多,相同 查询)。
  4. 只有一个数据库
  5. 根本不会做锁表
  6. .无嵌套事务
  7. 没有memcache或任何类似的系统,一切都很简单可能。
  8. 我相信我们正在使用"可序列化的 isooloation,而不是低级"

在这种情况下,Mysql引擎是保证数据完整性将被维护,还是在特定情况下:

  • 那些"同时"的著作会被排队吗?

  • 实际上,回滚将按检查工作。

  • "同时"的读数将找到状态的一致性那些著作?

我简单担心的是,如果不同连接转换中的"提交"和"回滚"是原子的,或者它们只是弄得一团糟:-)

谢谢。

"commit"将结束事务。

真正决定事务隔离级别的是

  • 在事务上下文中执行的所有语句都基于事务开始时的一致时间点快照(可重复读取和可序列化),或者是否

  • 事务
  • 中的每个语句都将看到其他事务提交的更改,例如 Oracle (已提交读取),或者是否

  • 每个语句都将看到尚未提交的其他事务所做的更改 ALA SQL Server 脏读(读取未提交)

要回答您的问题:

当可以获得锁时,将应用"同时写入"。如果没有其他会话保存不兼容的锁,则会获取锁,并且可以应用更改。

回滚将按预期工作,也就是说,以 ROLLBACK 语句结尾的事务将还原应用的任何更改,锁定的行将返回到事务开始时的状态,并且锁定将被释放。(这还包括触发器应用的任何 DML 更改。请注意,这仅适用于InnoDB。应用于MyISAM表的任何更改都已经提交,就像由Oracle风格的自治事务一样提交。

"同时读取"将分别来自一致的快照(具有可重复读取或可序列化事务隔离级别)。

注意 "提交"和"回滚"不会发生在"事务内部",它们结束事务,它们标记事务结束。事务开始时的一致快照消失了;下一个事务将获得自己的一致快照。这些操作最好不能被描述为"原子",但它们本身不会弄得一团糟。

它是InnoDB锁定机制,可以防止冲突的更改。如果两个同时发生的会话尝试对同一行进行更改(一个会话覆盖另一个会话所做的更改),则至少有一个事务将等待获取另一个事务持有的锁。当第一个事务释放锁时,第二个事务可以获取锁,并继续其更改;可以自由覆盖其他会话刚刚所做的更改。

事情是否最终变得一团糟实际上取决于交易的设计,以及什么是一团糟。

相关内容

  • 没有找到相关文章

最新更新