mysql - 我如何知道哪些事务首先运行

标签 mysql database transactions isolation-level transaction-isolation


SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

INSERT INTO Students VALUES(’Jason’,50);

UPDATE Students SET mark = mark + 10;

COMMIT

SET TRANSACTION ISOLATION READ COMMITED

INSERT INTO Students VALUES (’Kylie’,70);

SELECT SUM(mark) FROM Students;

COMMIT

如果我有两个同时运行的事务,我如何知道哪个事务首先运行以及查询将返回哪些值?我知道 Serialized 隔离了 T1。但更重要的是我不知道如何继续。

最佳答案

如果同时运行两者,READ COMMITTED 将等待 SERIALIZABLE 完成。顺便说一句,您的 TSQL 上似乎缺少 BEGIN TRANSACTION

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
   INSERT INTO Students VALUES(’Jason’,50);
   UPDATE Students SET mark = mark + 10;
COMMIT TRANSACTION

SET TRANSACTION ISOLATION READ COMMITTED
BEGIN TRANSACTION
   INSERT INTO Students VALUES (’Kylie’,70);
   SELECT SUM(mark) FROM Students;
COMMIT TRANSACTION

关于mysql - 我如何知道哪些事务首先运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58654823/

相关文章:

mysql - 设计 Rails 中的优化查询

php - SQL 查询只检索一行

java - @Transactional 注解属于哪里?

JavaScript SQLite 事务回滚

mysql - 在 MySQL 中运行定期查询的最佳方式

mysql - Oracle 数据库的扩展和高可用性

php - 根据下拉选项选择要保存的表

c# - C# 中带有字典的 InvalidCastException

c# - 本地数据库,我需要一些例子

php - 处理多个数据库之间的事务