Trovato un articolo con il titolo "Sintassi MySQL NOLOCK "
http://itecsoftware.com/with-nolock-table-hint -equivalente-per-mysql
SQL Server WITH (NOLOCK) si presenta così:
SELECT * FROM TABLE_NAME WITH (nolock)
Per ottenere lo stesso risultato con MySQL, cambiamo la modalità di isolamento della sessione utilizzando SET SESSION
comando.
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;
Puoi ottenere lo stesso anche di seguito:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;
Questa istruzione funzionerà in modo simile a WITH (NOLOCK), ovvero READ UNCOMMITTED
dati. Possiamo anche impostare il livello di isolamento per tutte le connessioni a livello globale:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
Inoltre, nel server MySQL esistono anche due variabili di sistema relative al livello di isolamento:
SELECT @@global.tx_isolation; (global isolation level)
SELECT @@tx_isolation; (session isolation level)
Oppure imposta il livello di isolamento all'interno di una transazione:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
In code gniter puoi eseguire il wrapping della tua query con le prime due soluzioni oppure puoi utilizzare l'opzione globale.
come riferimento è possibile utilizzare il codice di seguito:
$this->db->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");
$this->db->trans_start();
// your code
$this->db->trans_complete();
Aggiornamento 1:
Puoi semplicemente impostare il livello di isolamento in una query prima di eseguire le tue istruzioni. Di seguito è riportato il semplice codice php mysqli da utilizzare 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();