问题标签 [transaction-isolation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1129 浏览

java - Oracle JDBC 连接:事务隔离级别

在我的应用程序中,我使用 javax.sql.DataSource 来让 org.springframework.jdbc.core.JdbcTemplate 实例连接到Oracle数据源

现在,当我检查此 Oracle 连接的连接参数时,我看到trasactionIsolation级别属性为 2 [附加屏幕截图]

在此处输入图像描述

现在这2 个值映射到什么?如何从数据库中提到的隔离级别中找出事务的确切隔离级别是什么。 http://www.oracle.com/technetwork/issue-archive/2005/05-nov/o65asktom-082389.html

0 投票
1 回答
1001 浏览

transactions - Neo4j 中的读取隔离

我知道默认隔离级别是 READ_COMMITTED 并且读取是不可重复的,但我不确定我是否理解这意味着的所有内容。

如果线程 A 在嵌入式数据库上开始一个事务,然后线程 B 开始一个事务并提交它,是否保证或仅可能线程 A 的事务中的后续读取将看到线程 B 的事务的影响?

0 投票
1 回答
915 浏览

transactions - Teradata 14 中的哪个事务隔离级别与 IsolationLevel.Snapshot 非常匹配?

我正在使用 Teradat 14 .NET 提供程序。我想在单个事务中执行以下 SQL:

我遇到的这个问题是,虽然删除是即时的,但插入需要几秒钟。如果在删除之后但在插入提交之前(而不是在执行插入之前)发生选择,则不会返回任何行。SELECT因此,在提交事务之前 ,我不希望任何其他语句都可以看到这两个语句的结果。IsolationLevel.Snapshot有一个最符合我想要的描述:

Reduces blocking by storing a version of data that one application can read while another is modifying the same data. Indicates that from one transaction you cannot see changes made in other transactions, even if you requery.

问题是 Teradata 14 似乎不支持这种类型的事务:

The isolation level is not supported by this version of Teradata Database.

我必须做些什么来保持和的结果deleteinsert被其他人看到select在提交事务之前,

编辑

这是我在 dnoeth 回答后使用的代码。我正在使用 Teradata 会话并将所有 SQL 放入单个字符串中,如果在删除之后但在插入完成之前完成选择,则该字符串仍然不返回任何结果。dnoeth,我是按照你的建议做的吗?TdTransaction请注意,因为我bt;et;在 SQL 中做,所以没有对象。

0 投票
0 回答
79 浏览

database - 如何从单个 Django 查询中获取对象和值()?

我想将一些数据库对象导出为 JSON。导出格式或多或少与 的格式匹配Example.objects.values(*columns),除了每个 dict 还应该包含一个通过调用每个 (Example.objects.all()class Example(Model)实例)上的方法计算的值。

如何生成只有一个数据库查询的合适字典?

我将两个查询(我当前的解决方案)合并为一个的动机是一致性:我们在默认的“已提交读”级别上针对 PostgreSQL 运行 Django,这可能会使我的两个查询返回不一致的数据。(更好的表现也是一个好处,但不是主要动机。)

我看到两条路径:

  1. 在我的 python 代码中查询对象并将对象转换为字典。
  2. 查询字典并将字典转换为我的 python 代码中的对象。

哪个更好?我应该注意什么?我如何正确地做任何一个?Django 在幕后做了很多复杂的事情——无论如何,我看到的代码似乎有些复杂——所以我不确定:哪条路径最健壮?

注意:解决方案需要跨越__查找,即我希望例如{"other_model__pk": 1}成为可能的输出。快速测试表明django.forms.models.model_to_dict不这样做。

0 投票
2 回答
1324 浏览

sql - SQL Server:原子触发器

我有两个快速的问题。

  1. SqlServer 触发器默认是原子的吗?
  2. 如果没有怎么实现?

环境很简单。我有两个用户(我们称他们为 UserA 和 UserB)与数据库有两个不同的连接。两个连接同时处于活动状态。

当 UserA 在特定表中插入一行时,会触发一个触发器(我们称之为 TriggerAtomic)。我需要确保在触发 TriggerAtomic 时,UserB 在 TriggerAtomic 完成之前无法执行任何操作。显然,在 TriggerAtomic 完成之前,不能执行其他触发器、函数、过程……。

0 投票
1 回答
3148 浏览

mysql - MySQL Workbench 会话看不到数据库的更新

我使用 .deb 在 Ubuntu 系统中安装了 MySQL Workbench (community-6.2.3)。

工作台会话似乎没有看到其他会话(应用程序/命令行客户端)对数据库进行的更新 (DML)。
新会话能够在其开始时看到数据库的正确状态,但之后发生的任何更改都对其不可见。
在工作台中提交后,工作台会话似乎与 db 同步。

Error Code: 1412. Table definition has changed, please retry transaction 当我尝试查询从不同会话创建的表时,我得到了。

非工作台会话似乎没有任何这些问题。

我是否缺少配置或其他内容?


更新:

这部分是预期行为,部分是错误

没有使用自动提交模式,在这种情况下,SELECT语句是使用第一次读取时建立的快照执行的。
这是 MySQL Workbench 使用的 REPEATABLE READ 隔离级别的行为。

有没有办法更改或设置 MySQL Workbench 会话的默认隔离级别?

在 Workbench 中执行时:

返回:

相反,在命令行客户端:

相关:
MySQL REPEATABLE-READ Workbench 事务级别未设置
MySQL Workbench 和默认会话隔离级别

0 投票
0 回答
208 浏览

postgresql - How do I detect, specifically, a serialization failure when using SQL Alchemy?

When Postgresql rolls back a transaction due to a serialization failure, that bubbles up to SQL Alchemy in the form of a DBAPIError (I believe newer versions raise an OperationalError instead). But I want to know whether the issue was serializability (in which case I can retry the transaction) or something else (in which case I might want to present an error to the user).

I could catch the exception and read its string representation:

But I fear this is not robust and it feels wrong to be checking strings.

Is there a better way?

0 投票
1 回答
1401 浏览

django - What is the simplest way to retry a Django view upon an exception being raised?

I want to rerun a Django view function if a certain exception is raised (in my case a serialization error in the underlying database). I want it to run with exactly the same parameters, including the same request object - as if the client had re-requested the URL.

There are many database queries in the view, and the exception could be raised on any one of them - and it won't work to rerun just one of the queries in isolation, so I think I need to wrap the entire view function in a try/except block and loop until success.

But I have several view functions which might raise such exceptions, so I want a generic solution. I also want to be able to retry up to a certain number of times and then fail.

Is there any simple solution?

0 投票
0 回答
49 浏览

mysql - InnoDB 和隔离级别 - 可重复读取不是一件坏事吗?

我正在阅读有关InnoDB's 隔离级别的内容,这在很大程度上是有道理的,但我不明白为什么是unrepeatable reads一件坏事?不应该反过来吗?

举些例子:

假设我们有一个用于销售产品的库存列,每次有人购买一件商品时,我们都会从该列中取出一件商品,使用Repeatable readserializable隔离级别不会破坏数据完整性吗?

例如:

除非它在运行更新时使用正确的值?

0 投票
1 回答
4876 浏览

postgresql - GET DIAGNOSTICS ROW_COUNT 与并发语句

我想在 plpgsql 代码中使用来获取通过语句GET DIAGNOSTICS integer_var = ROW_COUNT插入到表中的行数。INSERT INTO

如果我INSERT INTO几乎同时运行多个语句,我可以确定GET DIAGNOSTICS为每个语句正确返回插入的行数吗?

我可以用一个例子来说明这一点,如果这种情况按以下顺序发生:

  1. 用户 A 运行 insert into 语句,将 10 行插入到表中。
  2. 用户 B 运行 insert into 语句,将 5 行插入到表中。
  3. 用户 A 调用GET DIAGNOSTICS rowcount = ROW_COUNT;
  4. 用户 B 调用GET DIAGNOSTICS rowcount = ROW_COUNT;

用户 A 会得到rowcount10 分,用户 B 会得到 5 分吗?或者两者都会得到5?