在插入语句末尾使用分号锁定 sybase 表

问题描述

在 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 行“消失”,任何阻塞锁也应该消失。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...