0

可以在 Sybase 中用分号终止插入语句会导致发生插入的表上的锁定吗?我试图在 sybase 表中插入 95 行,每个插入都由 ; 终止。是否有可能导致巨大的数据库锁

4

1 回答 1

1

不,分号不会导致锁定。

分号只是一个命令分隔符,与锁管理无关。

您可能有一个打开的事务在新插入的行上持有锁,可能升级为表级排他锁。您是否在链式事务模式下运行?您的客户端/应用程序是否有AUTOCOMMIT设置,如果有,它是什么?

运行什么命令/查询来确定您是否处于打开的事务中将取决于您使用的实际 Sybase RDBMS 产品(ASE?IQ?SQLAnywhere?Advantage?)。[如果您有 DBA,他/她应该能够帮助确定您是否有未结交易。] [更新:OP 已经声明Sybase ASE在这种情况下,查询select @@trancount将显示未结交易的数量......增加+1对于每个嵌套begin tran...0如果没有打开的事务,将返回。]

假设您在链式事务模式(又名AUTOCOMMIT=false)下运行,您可以尝试发出commit;; 如果这关闭了事务,那么锁应该被释放并且任何阻塞都应该消失。[一个可能的问题是嵌套的未结交易,在这种情况下,您需要commit;为每个未结交易发出一个;在这种情况下,发出多个commit;命令不会导致任何问题,同时确保多个打开的事务被关闭。]

另一种确定您是否处于打开事务中的方法...注销和/或断开您的客户端/应用程序与数据库的连接;当数据库看到您的连接消失时,它将回滚您的连接持有的任何打开的事务;回滚将导致 95 行“消失”,并且任何阻塞锁也应该消失。

于 2021-01-21T14:48:59.740 回答