gpt4 book ai didi

sql - oracle中的READ COMMITTED数据库隔离级别

转载 作者:行者123 更新时间:2023-12-04 17:59:30 27 4
gpt4 key购买 nike

我正在开发一个连接到 oracle 的网络应用程序。我们在 oracle 中有一个表,其中有一列“已激活”。任何时候只有一行可以将此列设置为 1。为了强制执行这一点,我们一直在 Java 中使用 SERIALIZED 隔离级别,但是我们遇到了“无法序列化事务”错误,并且无法找出原因。

我们想知道 READ COMMITTED 的隔离级别是否可以完成这项工作。所以我的问题是:

如果我们有一个涉及以下 SQL 的事务:

SELECT *
FROM MODEL;

UPDATE MODEL
SET ACTIVATED = 0;

UPDATE MODEL
SET ACTIVATED = 1
WHERE RISK_MODEL_ID = ?;

COMMIT;

鉴于可能同时执行多个事务,是否有可能多个 MODEL 行将激活标志设置为 1 ?

任何帮助,将不胜感激。

最佳答案

您可以考虑使用唯一的、基于函数的索引来让 Oracle 处理只有一行且激活标志设置为 1 的约束。

CREATE UNIQUE INDEX MODEL_IX ON MODEL ( DECODE(ACTIVATED, 1, 1, NULL));

这将停止多行将标志设置为 1,但并不意味着总是有一行将标志设置为 1。

关于sql - oracle中的READ COMMITTED数据库隔离级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1462854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com