可以在 Sybase 中用分号终止插入语句会导致发生插入的表上的锁定吗?我试图在 sybase 表中插入 95 行,每个插入都由 ; 终止。是否有可能导致巨大的数据库锁
1 回答
不,分号不会导致锁定。
分号只是一个命令分隔符,与锁管理无关。
您可能有一个打开的事务在新插入的行上持有锁,可能升级为表级排他锁。您是否在链式事务模式下运行?您的客户端/应用程序是否有AUTOCOMMIT
设置,如果有,它是什么?
运行什么命令/查询来确定您是否处于打开的事务中将取决于您使用的实际 Sybase RDBMS 产品(ASE?IQ?SQLAnywhere?Advantage?)。[如果您有 DBA,他/她应该能够帮助确定您是否有未结交易。] [更新:OP 已经声明Sybase ASE
在这种情况下,查询select @@trancount
将显示未结交易的数量......增加+1
对于每个嵌套begin tran
...0
如果没有打开的事务,将返回。]
假设您在链式事务模式(又名AUTOCOMMIT=false
)下运行,您可以尝试发出commit;
; 如果这关闭了事务,那么锁应该被释放并且任何阻塞都应该消失。[一个可能的问题是嵌套的未结交易,在这种情况下,您需要commit;
为每个未结交易发出一个;在这种情况下,发出多个commit;
命令不会导致任何问题,同时确保多个打开的事务被关闭。]
另一种确定您是否处于打开事务中的方法...注销和/或断开您的客户端/应用程序与数据库的连接;当数据库看到您的连接消失时,它将回滚您的连接持有的任何打开的事务;回滚将导致 95 行“消失”,并且任何阻塞锁也应该消失。