sql >> Base de Datos >  >> RDS >> Mysql

Obtener datos no comprometidos en MySQL

Encontré un artículo con el título "Sintaxis de MySQL NOLOCK "

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

SQL Server CON (NOLOCK) se ve así:

SELECT * FROM TABLE_NAME WITH (nolock)

Para lograr lo mismo con MySQL, cambiamos el modo de aislamiento de sesión usando SET SESSION comando.

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

También puede lograr lo mismo a continuación:

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

Esta declaración funcionará de manera similar a WITH (NOLOCK), es decir, READ UNCOMMITTED datos. También podemos establecer el nivel de aislamiento para todas las conexiones a nivel mundial:

 SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

Además, también existen dos variables del sistema relacionadas con el nivel de aislamiento en el servidor MySQL:

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

O establezca el nivel de aislamiento dentro de una transacción:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

En el iniciador de código, puede envolver su consulta con las dos primeras soluciones o puede usar la opción global.

para su referencia, puede usar el siguiente código:

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

// your code

$this->db->trans_complete();

Actualización 1:

Simplemente puede establecer el nivel de aislamiento en una consulta antes de ejecutar sus declaraciones. A continuación se muestra el código php mysqli simple para usar 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();