MySQL中可以用nolock吗
发布网友
发布时间:2022-09-16 00:21
我来回答
共1个回答
热心网友
时间:2023-10-11 06:38
nolock 是 SQL Server 特有的啊。
就是 对于一个表 A.
我 更新了一行, 还没有 Commit
那么你 SELECT * FROM A, 就卡住了。
要 SELECT * FROM A (nolock);
但是 MySQL 没有这方面的问题啊。
就是 对于一个表 A.
我 更新了一行, 还没有 Commit
那么你 SELECT * FROM A, 将查询到 我更新以前的原始数据记录。
不会卡住啊。追问那在MySQL中遇到类似的问题应该用什么呢?
追答
不会卡住, 你要干什么操作呢?
要看别人更新了未提交的数据?
MySQL 默认使用的是 REPEATABLE-READ
修改事务隔离级别的方法:
1.全局修改,修改mysql.ini配置文件,在最后加上
#可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
[mysqld]
transaction-isolation = REPEATABLE-READ
2.对当前session修改,在登录mysql客户端后,执行命令
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@TX_ISOLATION;
+------------------+
| @@TX_ISOLATION |
+------------------+
| READ-UNCOMMITTED |
+------------------+
1 row in set (0.00 sec)
READ UNCOMMITTED
会话1:
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Query OK, 0 rows affected (0.00 sec)
会话2:
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Query OK, 0 rows affected (0.00 sec)
会话1:
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE test_main SET value = 'FOUR-4' WHERE id = 4;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
会话2:
mysql> select * from test_main;
+----+--------+
| id | value |
+----+--------+
| 1 | ONE |
| 2 | TWO |
| 3 | THREE |
| 4 | FOUR-4 |
+----+--------+
4 rows in set (0.01 sec)
READ UNCOMMITTED 模式下, 会话2 读取到了 会话1 修改 但是未提交的数据。
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE test_main SET value ='THREE-3' WHERE id = 3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
会话1:
mysql> select * from test_main;
+----+---------+
| id | value |
+----+---------+
| 1 | ONE |
| 2 | TWO |
| 3 | THREE-3 |
| 4 | FOUR-4 |
+----+---------+
4 rows in set (0.00 sec)
READ UNCOMMITTED 模式下, 会话1 读取到了 会话2 修改 但是未提交的数据。