gpt4 book ai didi

mysql - 在 MySQL 中获取未提交的数据

转载 作者:IT老高 更新时间:2023-10-28 23:55:17 26 4
gpt4 key购买 nike

在 SQL Server 中,我们可以编写以下 SQL 查询来获取数据库中未提交的数据。这意味着数据仍在交易中,交易未完成。

SQL 服务器查询

Select * from TableName With(NoLock);

即使表被锁定,MySQL数据库中是否有任何等价物来获取数据?

最佳答案

找到一篇标题为“MySQL NOLOCK 语法”的文章

http://itecsoftware.com/with-nolock-table-hint-equivalent-for-mysql

SQL Server WITH (NOLOCK) 如下所示:

SELECT * FROM TABLE_NAME WITH (nolock)

为实现与 MySQL 相同的效果,我们使用 SET SESSION 命令更改 session 隔离模式。

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;

您也可以通过以下方式实现:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;

此语句的工作方式类似于 WITH (NOLOCK),即 READ UNCOMMITTED 数据。我们还可以全局设置所有连接的隔离级别:

 SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

另外,MySQL服务器中还存在两个与隔离级别相关的系统变量:

SELECT @@global.tx_isolation; (global isolation level)
SELECT @@tx_isolation; (session isolation level)

或者在事务内部设置隔离级别:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

在代码点火器中,您可以使用前两个解决方案包装查询,也可以使用全局选项。

您可以使用以下代码供您引用:

$this->db->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");
$this->db->trans_start();

// your code

$this->db->trans_complete();

更新 1:

您可以在运行语句之前在查询中设置隔离级别。下面是简单的php mysqli代码你使用隔离级别读取未提交

//db connection
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');

//set isolation level
$mysqli->query("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");

//your Select Query
$results = $mysqli->query("SELECT * FROM tablename");


while($row = $results->fetch_assoc()) {
//some statements
}

// Frees the memory associated with a result
$results->free();
$mysqli->query("COMMIT");
// close connection
$mysqli->close();

关于mysql - 在 MySQL 中获取未提交的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com