mySQL - Set livello di isolamento usando mysqli di PHP
-
20-09-2019 - |
Domanda
Come faccio a impostare il livello di isolamento di una transazione a 'SERIALIZZABILE' in PHP utilizzando mysqli? Ho cercato dappertutto e non riesco a trovare tutte le informazioni su di esso.
Qui è una spiegazione dei livelli di isolamento.
Soluzione
Si può solo impostare il livello di isolamento in una query prima di eseguire le sue dichiarazioni. Questo supporre che si fa tutto utilizzando la stessa sessione:
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");
...
Si consiglia inoltre di disattivare autocommit prima mano dal momento che cambia la isolamento serializzabile funziona .
Altri suggerimenti
Risposta breve:
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");
Long Risposta:. A meno che non si utilizza il SESSION o GLOBAL il modificatore, l'impostazione del livello di transazione si applicherà solo alla successiva interrogazione
TLDR;
Secondo il MySQL documentazione con InnoDB tabelle:
Senza alcun SESSION o parola chiave GLOBALE:
L'informativa è resa solo per il prossimo singolo transazione eseguita all'interno della sessione.
Le transazioni successive tornare a utilizzare il valore sessione del nome caratteristiche.
La dichiarazione non è consentita all'interno di transazioni
Si noti che impostando il flag GLOBAL
interesserà tutti successiva query sessioni esistenti non saranno influenzate.