以下是一个示例表,用于测试MySQL的四个隔离级别:

CREATE TABLE test (
  id INT PRIMARY KEY,
  name VARCHAR(255),
  balance DECIMAL(10, 2)
);

INSERT INTO test (id, name, balance) VALUES (1, 'Alice', 100.00);
INSERT INTO test (id, name, balance) VALUES (2, 'Bob', 200.00);

接下来,我们将测试每个隔离级别的效果:

  1. 读未提交(Read Uncommitted)隔离级别:
-- 连接1
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN;
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 100.00)

-- 连接2
BEGIN;
UPDATE test SET balance = balance + 50.00 WHERE id = 1;

-- 连接1
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 150.00)
COMMIT;

-- 连接2
COMMIT;

-- 连接1
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 150.00)
  1. 读已提交(Read Committed)隔离级别:
-- 连接1
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 100.00)

-- 连接2
BEGIN;
UPDATE test SET balance = balance + 50.00 WHERE id = 1;

-- 连接1
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 100.00)
COMMIT;

-- 连接2
COMMIT;

-- 连接1
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 150.00)
  1. 可重复读(Repeatable Read)隔离级别:
-- 连接1
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 100.00)

-- 连接2
BEGIN;
UPDATE test SET balance = balance + 50.00 WHERE id = 1;

-- 连接1
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 100.00)
COMMIT;

-- 连接1
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 100.00)
  1. 串行化(Serializable)隔离级别:
-- 连接1
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN;
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 100.00)

-- 连接2
BEGIN;
UPDATE test SET balance = balance + 50.00 WHERE id = 1;

-- 连接1
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 100.00)
COMMIT;

-- 连接1
SELECT * FROM test WHERE id = 1; -- 返回结果:(1, 'Alice', 100.00)

以上是对MySQL四个隔离级别的简单测试示例。请注意,实际的结果可能会因为数据库引擎和具体的事务处理逻辑而有所不同

建立一张表分别测试mySQL的四个隔离级别

原文地址: http://www.cveoy.top/t/topic/iXZr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录