Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir des données non validées dans MySQL

Trouvé un article avec le titre "Syntaxe MySQL NOLOCK "

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

SQL Server AVEC (NOLOCK) ressemble à ceci :

SELECT * FROM TABLE_NAME WITH (nolock)

Pour obtenir la même chose avec MySQL, nous changeons le mode d'isolation de session en utilisant le SET SESSION commande.

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

Vous pouvez également obtenir la même chose ci-dessous :

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

Cette instruction fonctionnera de la même manière que WITH (NOLOCK) c'est-à-dire READ UNCOMMITTED Les données. Nous pouvons également définir le niveau d'isolement pour toutes les connexions globalement :

 SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

De plus, deux variables système liées au niveau d'isolement existent également dans le serveur MySQL :

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

Ou définissez le niveau d'isolement dans une transaction :

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

Dans l'allumeur de code, vous pouvez envelopper votre requête avec les deux premières solutions ou vous pouvez utiliser l'option globale.

pour votre référence, vous pouvez utiliser le code ci-dessous :

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

// your code

$this->db->trans_complete();

Mise à jour 1 :

Vous pouvez simplement définir le niveau d'isolement dans une requête avant d'exécuter vos instructions. Vous trouverez ci-dessous le code php mysqli simple à utiliser 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();