Transactions “火鸟锁”;表「;防止插入
是否可以锁定表以防止插入/更新/删除 我需要锁定一个表,删除一些记录并“重置”生成器Transactions “火鸟锁”;表「;防止插入,transactions,locking,firebird,Transactions,Locking,Firebird,是否可以锁定表以防止插入/更新/删除 我需要锁定一个表,删除一些记录并“重置”生成器 >> lock table logs to prevent inserts/updates/deletes; delete from logs where id <= :lastIdProcessed; if ((select count(1) from logs) = 0) { alter sequence logSequence restart with 0; } >>
>> lock table logs to prevent inserts/updates/deletes;
delete from logs where id <= :lastIdProcessed;
if ((select count(1) from logs) = 0) {
alter sequence logSequence restart with 0;
}
>> commit and release table
>锁定表日志以防止插入/更新/删除;
从id>提交和发布表所在的日志中删除
另一个问题是,如果有一个
插入到日志中(gen_id(logSequence,1))
正在等待锁的释放,我将进入throwble,insert将在日志序列
使用其值递增的情况下运行,然后再重新启动
?根据您的需要,您可以使用
SET TRANSACTION
READ WRITE
ISOLATION LEVEL SNAPSHOT TABLE STABILITY
WAIT
RESERVING <tablename>, <tablename> FOR PROTECTED WRITE
设置事务
读写
隔离级别快照表稳定性
等待
保留,用于受保护的写入
快照表稳定性隔离级别
快照表稳定性
隔离级别最高
限制性的。与快照中一样,快照中的事务
快照表稳定性
隔离只查看已提交的更改
在当前事务启动之前。过了一会儿
快照表稳定性
已启动,其他事务无法对其进行任何更改
数据库中具有挂起更改的任何表。其他交易
能够读取其他数据,但任何插入、更新或
由并行进程删除将导致冲突异常
RESERVING
子句可用于允许其他交易继续进行
更改某些表中的数据
如果任何其他事务中有未提交的数据更改挂起
使用
快照表稳定性
隔离级别已启动,正在尝试启动
快照表稳定性
事务将导致异常
[……]
保留
SET TRANSACTION
语句中的RESERVING
子句保留
表列表中指定的表。预订一张桌子可以防止其他人
交易不允许对其进行更改,甚至包括
从某些参数中读取数据,而
事务正在运行
RESERVING
子句也可用于指定
可以由其他事务更改,即使该事务是
从快照表稳定性
隔离级别开始
一个RESERVING
子句用于指定尽可能多的保留表
必需的
有关更多信息,请参阅;您可能还想查阅旧的Interbase 6.0文档(特别是嵌入式SQL指南和开发人员指南,请参见末尾)以获取信息
我没有使用此功能的经验,因此我无法就其潜在的缺陷向您提供建议。根据您的需要,您可以使用
SET TRANSACTION
READ WRITE
ISOLATION LEVEL SNAPSHOT TABLE STABILITY
WAIT
RESERVING <tablename>, <tablename> FOR PROTECTED WRITE
设置事务
读写
隔离级别快照表稳定性
等待
保留,用于受保护的写入
快照表稳定性隔离级别
快照表稳定性
隔离级别最高
限制性的。与快照中一样,快照中的事务
快照表稳定性
隔离只查看已提交的更改
在当前事务启动之前。过了一会儿
快照表稳定性
已启动,其他事务无法对其进行任何更改
数据库中具有挂起更改的任何表。其他交易
能够读取其他数据,但任何插入、更新或
由并行进程删除将导致冲突异常
RESERVING
子句可用于允许其他交易继续进行
更改某些表中的数据
如果任何其他事务中有未提交的数据更改挂起
使用
快照表稳定性
隔离级别已启动,正在尝试启动
快照表稳定性
事务将导致异常
[……]
保留
SET TRANSACTION
语句中的RESERVING
子句保留
表列表中指定的表。预订一张桌子可以防止其他人
交易不允许对其进行更改,甚至包括
从某些参数中读取数据,而
事务正在运行
RESERVING
子句也可用于指定
可以由其他事务更改,即使该事务是
从快照表稳定性
隔离级别开始
一个RESERVING
子句用于指定尽可能多的保留表
必需的
有关更多信息,请参阅;您可能还想查阅旧的Interbase 6.0文档(特别是嵌入式SQL指南和开发人员指南,请参见末尾)以获取信息
我没有使用此功能的经验,因此我无法就其潜在缺陷向您提供建议。将所有数据库切换到除SYSDBA模式以外的无连接模式,清除表,重置生成器,将数据库切换回工作模式您可以在插入或更新之前放置触发器,该触发器会无条件地导致错误,如除零,这将排除任何添加的数据。然而,这是一种“丑陋的黑客行为”,你可以使用你所有的用户/角色/过程,并撤销他们修改表的安全权限,但总而言之,这似乎是一个相当不合理的想法,为什么会有人想要它?将所有数据库切换到除SYSDBA模式以外的无连接模式,清除表,重置生成器,将数据库切换回工作模式您可以在插入或更新之前放置一个触发器,该触发器会无条件地导致错误,如被零除,这将排除任何添加的数据。然而,这是一种“丑陋的黑客行为”,你可以利用你所有的用户/角色/程序,并撤销他们修改表格的安全权限,但总而言之,这似乎是一个相当不合理的想法,为什么有人会想要它?