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