Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zeilen, die von einer laufenden Transaktion eingefügt wurden, können nicht angezeigt werden, wenn die Isolationsstufe READ_UNCOMMITTED ist

Mit meinem kleinen Testskript werden vor dem Commit keine Datensätze angezeigt, wenn ich mich von einer anderen Konsole aus anmelde. Ich kann die gerade eingefügten Datensätze jedoch in derselben Sitzung auswählen. Ich gehe also davon aus, dass Sie vor dem Commit möglicherweise auf Zeilen zugreifen, die sich bereits in der Tabelle befinden, aber jetzt auf neue Zeilen oder Änderungen, bevor sie festgeschrieben werden.

<?php

require_once('db.php');

q( 'drop table if exists t' );
q( 'create table t (id integer not null auto_increment primary key, v datetime) engine=innodb' );

q( 'set transaction isolation level read uncommitted' );
q( 'start transaction' );
q( 'insert into t (v) values (now()),(now()),(now())' );

echo q1( 'count(*)', 't', 'true'); // translates to "select count(*) from t where true"; 
// echoes "3" to the console

// wait for input
$handle = fopen ("php://stdin","r");
$line = fgets($handle);

// with a mysql client from a 2nd console at this point no new records show in table t

q( 'commit' );

// after this point all new records show up in table t from a 2nd session.