【发布时间】:2020-08-23 13:14:52
【问题描述】:
假设我们在一个事务中有三个 SQL。应用实例执行开始事务,并执行第一个sql,然后应用实例崩溃。会不会导致死锁或者第一个SQL锁住的资源永远不会释放?
如果它不会导致死锁,那么dbms如何实现这个目标?是否使用了超时机制?
【问题讨论】:
标签: sql transactions deadlock
假设我们在一个事务中有三个 SQL。应用实例执行开始事务,并执行第一个sql,然后应用实例崩溃。会不会导致死锁或者第一个SQL锁住的资源永远不会释放?
如果它不会导致死锁,那么dbms如何实现这个目标?是否使用了超时机制?
【问题讨论】:
标签: sql transactions deadlock
如果您的应用崩溃,这意味着与数据库的连接丢失。
数据库服务器最终会注意到这一点并终止数据库会话。
我知道的所有数据库系统都将通过回滚终止数据库会话,因此应用程序所做的任何事情都将被回滚并释放所有锁。所以没有陷入僵局的危险。
这究竟是如何完成的,以及服务器需要多长时间才能注意到客户端 (=app) 已消失,但这取决于实际的 DBMS 产品。
【讨论】: