sql >> Databasteknik >  >> RDS >> Mysql

Få oengagerad data i MySQL

Hittade en artikel med titeln "MySQL NOLOCK-syntax "

http://itecsoftware.com/with-nolock-table-hint -ekvivalent-för-mysql

SQL Server WITH (NOLOCK) ser ut så här:

SELECT * FROM TABLE_NAME WITH (nolock)

För att uppnå samma sak med MySQL ändrar vi sessionsisoleringsläget med SET SESSION kommando.

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

Du kan uppnå samma genom att också nedan:

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

Detta uttalande kommer att fungera på samma sätt som WITH (NOLOCK), dvs. data. Vi kan också ställa in isoleringsnivån för alla anslutningar globalt:

 SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

Dessutom finns två systemvariabler relaterade till isoleringsnivå också i MySQL-servern:

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

Eller ställ in isoleringsnivån i en transaktion:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO

I code igniter kan du slå in din fråga med de två första lösningarna eller så kan du använda global option.

som referens kan du använda nedanstående kod:

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

// your code

$this->db->trans_complete();

Uppdatering 1:

Du kan bara ställa in isoleringsnivån i en fråga innan du kör dina uttalanden. Nedan är den enkla php mysqli-koden för att använda isolationsnivå läs oengagerad

//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. Hur sammanfogar man många rader med samma id i sql?

  2. Anslutningsproblem med SQLAlchemy och flera processer

  3. 4 sätt att skilja timmar, minuter och sekunder från ett tidsvärde i MariaDB

  4. MySQL Alter-tabellen orsakar Fel:Ogiltig användning av NULL-värdet