Znaleziono artykuł zatytułowany „Składnia MySQL NOLOCK "
http://itecsoftware.com/with-nolock-table-hint -odpowiednik-dla-mysql
SQL Server WITH (NOLOCK) wygląda tak:
SELECT * FROM TABLE_NAME WITH (nolock)
Aby osiągnąć to samo z MySQL, zmieniamy tryb izolacji sesji za pomocą SET SESSION
polecenie.
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;
Możesz to osiągnąć również poniżej:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;
Ta instrukcja będzie działać podobnie do WITH (NOLOCK), tj. READ UNCOMMITTED
dane. Możemy również ustawić poziom izolacji dla wszystkich połączeń globalnie:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
Ponadto na serwerze MySQL istnieją również dwie zmienne systemowe związane z poziomem izolacji:
SELECT @@global.tx_isolation; (global isolation level)
SELECT @@tx_isolation; (session isolation level)
Lub ustaw poziom izolacji wewnątrz transakcji:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
W rozruszniku kodu możesz owinąć swoje zapytanie dwoma pierwszymi rozwiązaniami lub możesz użyć opcji globalnej.
w celach informacyjnych możesz użyć poniższego kodu:
$this->db->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");
$this->db->trans_start();
// your code
$this->db->trans_complete();
Aktualizacja 1:
Możesz po prostu ustawić poziom izolacji w zapytaniu przed uruchomieniem instrukcji. Poniżej znajduje się prosty kod mysqli php tu użyj 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();