CodeIgniter で使用する$this->db->trans_start();
と、read commit 分離レベルでトランザクションが開始されます。代わりにシリアル化可能な分離レベルを使用したいのですが、trans_start
これを設定できないようです。
CodeIgniter でトランザクションのトランザクション レベルを設定するにはどうすればよいですか?
CodeIgniter で使用する$this->db->trans_start();
と、read commit 分離レベルでトランザクションが開始されます。代わりにシリアル化可能な分離レベルを使用したいのですが、trans_start
これを設定できないようです。
CodeIgniter でトランザクションのトランザクション レベルを設定するにはどうすればよいですか?
mysqlのドキュメントによると
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE
取引中にやりたいなら使ったほうがいいと思います
またはそうでなければ
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
トランザクションを開始する前に、次のように設定します。
$this->db->query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;');
$this->db->trans_start();
ドキュメントからのコピーペーストは次のとおりです。
GLOBAL キーワードを使用すると、ステートメントは後続のすべてのセッションに対してデフォルトのトランザクション レベルをグローバルに設定します。既存のセッションは影響を受けません。
SESSION キーワードを使用すると、ステートメントは、現在のセッション内で実行される後続のすべてのトランザクションに対してデフォルトのトランザクション レベルを設定します。
SESSION または GLOBAL キーワードがない場合、このステートメントは、現在のセッション内で実行される次の (開始されていない) トランザクションの分離レベルを設定します。
アクティブなトランザクションがある間は、GLOBAL または SESSION を指定しない SET TRANSACTION ISOLATION LEVEL は許可されません