ホームページ >データベース >mysql チュートリアル >MySQLのトランザクションについて詳しく解説
MySQL トランザクション:
1.MySQL トランザクション制御ステートメント
(1)。トランザクション
begin;
を送信します(3)。トランザクション
commit;
をロールバックします。トランザクションが自動であるかどうか 送信
rollback;
例:
set autocommit = {0 | 1}; // 0不自动提交,1自动提交
これはデータを挿入する単純なトランザクションです
begin;// 开启事务 insert into table_name values(内容); commit;// 提交事务
これはデータを挿入する単純なロールバックトランザクションです
2. MySQLトランザクション分離ステートメント
の分離レベルを表示します。 MySQL
begin;// 开启事务 insert into table_name values(内容);// 后悔了,不想插入数据了 rollback;// 回滚,取消这次的事务操作
(1).read-uncommitted (コミットされていないコンテンツの読み取り)
ダーティ リーディング (問題が発生する);
ユーザーの 2 つのクエリ結果のコンテンツは同じではありません。
デフォルトの分離レベルを設定します (設定が完了しました 再度ログインする必要があります):
show variables like 'tx_isolation';
2 人のユーザーが同時にデータベースにログインし、それぞれトランザクションを開始します。一方のユーザーのトランザクションは追加、削除、変更の操作を実行し、もう一方のユーザーのトランザクションはクエリ操作のみを実行します。前者は送信せずに操作を実行し、後者は操作の結果を確認できますが、前者がこの時点でトランザクションをロールバックすると、後者のクエリでは前回とは異なる結果が表示されます(つまり、問題:
(2).read commit (コミットされたコンテンツの読み取り)
トランザクションは、コミットされたトランザクションによって行われた変更のみを参照できます。このレベルでは、反復不可能な読み取りが発生する可能性があります。問題点。
設定 デフォルトの分離レベル (設定完了後、再度ログインする必要があります):
set global transaction isolation level read uncommitted;
1 つのトランザクションで、2 つの異なるクエリ結果が表示されました (ダーティ リードに似ています)。
(3).repeatable read(反復可能な読み取り)
データを同時に読み取るときに、同じトランザクションの複数のインスタンスが同じデータ行を確実に参照できるようにすることができます (データベースの分離レベル)。
デフォルトの分離レベルを設定します (保存後に再度ログインする必要があります)。設定が完了しました):
set global transaction isolation level read committed;
つまり、トランザクションでは、他のユーザーがデータをどのように変更しても、このトランザクションでクエリされた結果は常に同じです。
***暗黙的なトランザクションコミット***:
set global transaction isolation level repeatable read;
3.InnoDB のロック メカニズム
(1)。テーブルには主キーとインデックスが存在せず、トランザクションはテーブル内のすべてのレコードをロックし、他のトランザクションはテーブルを操作できません。
(2). テーブルに主キーまたはインデックスがある場合、トランザクションは操作するテーブル内のデータの特定の行をロックし、他のトランザクションがこのテーブル内の他のデータを操作する場合はテーブル全体をロックしません。影響: ここでの行レベルのロックは、データの n 行を変更する場合など、ギャップ ロックであることに注意してください。 id
以上がMySQLのトランザクションについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。