Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obter dados não confirmados no MySQL


Encontrou um artigo com o título "Sintaxe do MySQL NOLOCK "

http://itecsoftware.com/with-nolock-table-hint -equivalente-para-mysql

SQL Server WITH (NOLOCK) se parece com isso:
SELECT * FROM TABLE_NAME WITH (nolock)

Para conseguir o mesmo com o MySQL, alteramos o modo de isolamento de sessão usando o SET SESSION comando.
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
 SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;

Você pode conseguir o mesmo abaixo também:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;

Esta instrução funcionará de maneira semelhante a WITH (NOLOCK), ou seja, READ UNCOMMITTED dados. Também podemos definir o nível de isolamento para todas as conexões globalmente:
 SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

Além disso, duas variáveis ​​de sistema relacionadas ao nível de isolamento também existem no servidor MySQL:
SELECT @@global.tx_isolation; (global isolation level)
SELECT @@tx_isolation; (session isolation level)

Ou defina o nível de isolamento dentro de uma transação:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

No code igniter, você pode agrupar sua consulta com as duas primeiras soluções ou pode usar a opção global.

para sua referência, você pode usar o código abaixo:
$this->db->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");
$this->db->trans_start();

// your code

$this->db->trans_complete();

Atualização 1:

Você pode apenas definir o nível de isolamento em uma consulta antes de executar suas instruções. Abaixo está o código php mysqli simples que você usa isolation level read uncommited
//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();