sql >> Database >  >> RDS >> Mysql

Krijg niet-vastgelegde gegevens in MySQL

Een artikel gevonden met de titel "MySQL NOLOCK-syntaxis "

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

SQL Server WITH (NOLOCK) ziet er als volgt uit:

SELECT * FROM TABLE_NAME WITH (nolock)

Om hetzelfde te bereiken met MySQL, wijzigen we de sessie-isolatiemodus met behulp van de SET SESSION commando.

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

U kunt hetzelfde bereiken door hieronder ook:

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

Deze instructie werkt op dezelfde manier als WITH (NOLOCK), d.w.z. READ UNCOMMITTED gegevens. We kunnen ook het isolatieniveau voor alle verbindingen wereldwijd instellen:

 SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

Daarnaast bestaan ​​er ook twee systeemvariabelen met betrekking tot isolatieniveau in de MySQL-server:

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

Of stel het isolatieniveau binnen een transactie in:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

In code igniter kun je je vraag omwikkelen met de eerste twee oplossing of je kunt de globale optie gebruiken.

voor uw referentie kunt u onderstaande code gebruiken:

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

// your code

$this->db->trans_complete();

Update 1:

U kunt het isolatieniveau in een query gewoon instellen voordat u uw instructies uitvoert. Hieronder vindt u de eenvoudige php mysqli-code die u kunt gebruiken 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();


  1. Toepassingsmachtigingen opslaan in een database

  2. MySQL Zoeken in volledige tekst en SOUNDEX

  3. Hoe de RIGHT()-functie werkt in MySQL

  4. Mysql MySQL of PHP Transformeer rijen dynamisch naar twee kolommen