mysql 隔离级别和可重复读啥意思

MySQL支持的隔离级别有四种,分别是:

Read Uncommitted(读未提交)

Read Committed(读已提交)

Repeatable Read(可重复读)

Serializable(串行化)

这些隔离级别是为了解决事务并发时可能出现的问题,如脏读、不可重复读和幻读。以下是每个隔离级别的简要描述:

Read Uncommitted(读未提交)

这是最低的隔离级别。在此隔离级别下,一个事务可以读取另一个尚未提交的事务的数据。这可能导致脏读、不可重复读和幻读。

Read Committed(读已提交)

这是默认的隔离级别。只能读取已提交的数据,避免了脏读。但仍然可能出现不可重复读和幻读。

Repeatable Read(可重复读)

在此隔离级别下,同一个事务的多次读取将看到相同的数据行。这避免了脏读和不可重复读,但仍然可能出现幻读。

Serializable(串行化)

这是最高的隔离级别。它通过强制事务串行执行,避免了脏读、不可重复读和幻读。但这也可能导致性能下降,因为事务需要等待其他事务完成才能执行。

在MySQL中,可以通过设置SET TRANSACTION ISOLATION LEVEL来改变当前会话的隔离级别。需要注意的是,MySQL的InnoDB存储引擎默认使用Repeatable Read作为隔离级别,而MyISAM存储引擎默认使用Read Committed。

MySQL中的可重复读(Repeatable Read)是事务的隔离级别之一。在这个隔离级别下,同一个事务的多次读取将看到相同的数据行,避免了脏读和不可重复读,但仍然可能出现幻读。

以下是一个MySQL可重复读的例子:

-- 开启一个事务START TRANSACTION;

-- 设置隔离级别为可重复读

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- 执行一些SQL操作,例如插入、更新或删除数据

INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2');

UPDATE table_name SET column1 = 'new_value' WHERE column2 = 'value2';

DELETE FROM table_name WHERE column1 = 'value1';

-- 提交事务COMMIT;

在上述例子中,我们首先开启了事务并设置隔离级别为可重复读。然后,我们执行了一些SQL操作,例如插入、更新或删除数据。最后,我们提交了事务。在这个过程中,由于隔离级别设置为可重复读,同一个事务的多次读取将看到相同的数据行,避免了脏读和不可重复读。但是,仍然可能出现幻读,因为其他事务可能在此期间插入了新的数据行。

 

你可能感兴趣的:(mysql)