php – 在MySQL中获取未提交的数据

前端之家收集整理的这篇文章主要介绍了php – 在MySQL中获取未提交的数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
sql Server中,我们可以在下面的SQL查询中编写以获取数据库中的未提交数据.这意味着仍处于事务和事务处理的数据尚未完成.

sql Server查询

  1. Select * from TableName With(NoLock);

即使表被锁定,MysqL数据库中是否有任何等价性来获取数据?我正在PHP CodeIgnitor尝试这个

发现一篇标题为“MysqL NOLOCK语法”的文章

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

sql Server WITH(NOLOCK)如下所示:

  1. SELECT * FROM TABLE_NAME WITH (nolock)

为了与MysqL完全相同,我们使用SET SESSION命令更改会话隔离模式.

  1. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  2. SELECT * FROM TABLE_NAME ;
  3. SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;

你也可以在下面同样地:

  1. SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  2. SELECT * FROM TABLE_NAME ;
  3. COMMIT ;

此语句将工作类似于WITH(NOLOCK),即READ UNCOMMITTED数据.我们还可以为全局连接设置隔离级别:

  1. SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

另外还有两个与隔离相关的系统变量也存在于MysqL服务器中:

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

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

  1. SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  2. GO

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

为了您的参考,您可以使用以下代码

  1. $this->db->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");
  2. $this->db->trans_start();
  3.  
  4. // your code
  5.  
  6. $this->db->trans_complete();

更新1:

您可以在运行语句之前在查询中设置隔离级别.下面是简单的PHP MysqLi代码tu使用隔离级别读取uncommited

  1. //db connection
  2. $MysqLi = new MysqLi('localhost','user','pass','db');
  3.  
  4. //set isolation level
  5. $MysqLi->query("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
  6.  
  7. //your Select Query
  8. $results = $MysqLi->query("SELECT * FROM tablename");
  9.  
  10.  
  11. while($row = $results->fetch_assoc()) {
  12. //some statements
  13. }
  14.  
  15. // Frees the memory associated with a result
  16. $results->free();
  17. $MysqLi->query("COMMIT");
  18. // close connection
  19. $MysqLi->close();

猜你在找的PHP相关文章