Mia*_*aow 2 mysql database postgresql concurrency asynchronous
你好,
如果我必须同时更新两个不同的行,但如果另一个更新失败,则必须不更新,我目前的想法是使用事务。
但是事务能够执行并行操作吗?
在我不需要查询结果来执行下一个(s)的情况下,有没有办法同时运行查询?
这是一个理论问题,所以:
我通过在我的问题中寻找答案来了解关系数据库中的锁和并发问题,但没有找到我想要的......
提前感谢您的时间!
是的,这是可能的;它被称为分布式事务。它是在 MySQL 和 PostgreSQL(以及我听说过的每个 RDBMS)中通过两阶段提交实现的。
这个想法是您在两个并发数据库会话上启动事务。当您必须在一个事务中回滚时,您也会在另一个事务中回滚。
完成工作后,您就可以准备两个交易。这是一个特殊的过程,它在实际提交之外完成所有工作,以便保证后续提交工作。此外,这样一个准备好的事务必须被持久化,这样它才能在崩溃时幸存下来。
如果数据库上的准备步骤失败,则回滚两个事务。
成功准备好所有事务后,您就可以提交它们。这绝不应该失败,因为所有“艰苦的工作”在准备期间已经完成。
您需要一个协调工作的组件。该组件称为事务管理器,必须保持每个事务的状态,以便即使工作因崩溃或其他原因中断,它也可以继续处理。该组件确保所有事务要么提交要么回滚。
SQL 语句在 PostgreSQL 和 MySQL 中是不同的:
| PostgreSQL | MySQL
----------+----------------------------+--------------------
start | BEGIN | XA START
prepare | PREPARE TRANSACTION <name> | XA PREPARE <name>
commit | COMMIT PREPARED <name> | XA COMMIT <name>
rollback | ROLLBACK PREPARED <name> | XA ROLLBACK <name>
Run Code Online (Sandbox Code Playgroud)
请参阅PostgreSQL和MySQL的文档。
归档时间: |
|
查看次数: |
1202 次 |
最近记录: |