Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Holen Sie sich nicht festgeschriebene Daten in MySQL

Artikel mit dem Titel "MySQL NOLOCK syntax" gefunden "

http://itecsoftware.com/with-nolock-table-hint -äquivalent-für-mysql

SQL Server WITH (NOLOCK) sieht so aus:

SELECT * FROM TABLE_NAME WITH (nolock)

Um dasselbe mit MySQL zu erreichen, ändern wir den Sitzungsisolationsmodus mit SET SESSION Befehl.

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

Sie können dasselbe auch wie folgt erreichen:

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

Diese Anweisung funktioniert ähnlich wie WITH (NOLOCK), d. h. READ UNCOMMITTED Daten. Wir können die Isolationsstufe auch global für alle Verbindungen festlegen:

 SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

Außerdem gibt es im MySQL-Server zwei Systemvariablen, die sich auf die Isolationsstufe beziehen:

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

Oder legen Sie die Isolationsstufe innerhalb einer Transaktion fest:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

In Code Igniter können Sie Ihre Abfrage mit den ersten beiden Lösungen umschließen oder die globale Option verwenden.

Als Referenz können Sie den folgenden Code verwenden:

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

// your code

$this->db->trans_complete();

Aktualisierung 1:

Sie können die Isolationsstufe einfach in einer Abfrage festlegen, bevor Sie Ihre Anweisungen ausführen. Unten ist der einfache PHP-Mysqli-Code zur Verwendung von 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();