sql >> データベース >  >> RDS >> Mysql

MySQLでコミットされていないデータを取得する

    MySQLNOLOCK構文」というタイトルの記事が見つかりました "

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

    SQL Server WITH(NOLOCK)は次のようになります:

    SELECT * FROM TABLE_NAME WITH (nolock)
    

    MySQLでも同じことを実現するために、SET SESSIONを使用してセッション分離モードを変更します。 コマンド。

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

    以下でも同じことを達成できます:

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

    このステートメントは、WITH(NOLOCK)と同様に機能します。つまり、READ UNCOMMITTED データ。すべての接続の分離レベルをグローバルに設定することもできます:

     SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
    

    さらに、分離に関連する2つのシステム変数もMySQLサーバーに存在します。

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

    または、トランザクション内で分離レベルを設定します:

    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
    GO
    

    コードイグナイターでは、クエリを最初の2つのソリューションでラップするか、グローバルオプションを使用できます。

    参考までに、以下のコードを使用できます:

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

    更新1:

    ステートメントを実行する前に、クエリで分離レベルを設定するだけです。以下は、単純なphpmysqliコードです。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. SQLクエリで最も近い緯度/経度を見つける

    2. 致命的なエラー:stdClass型のオブジェクトを配列として使用できません

    3. SQL Server:PARTITIONBYとGROUPBYの違い

    4. データの重複排除時に避けるべき5つのよくある間違い