「MySQL - トランザクション」の版間の差分
(ページの作成:「== 概要 == トランザクションとは、複数の処理を1つにまとめることである。<br> <br> 例えば、<u>A -> B ->C</u>という順にフローが進む時、A、B、Cが全て問題なく実行可能な場合のみ同時に実行することをトランザクション処理という。<br> AとBの処理は成功したがCの処理に失敗した場合は、AおよびBの処理も実行されずロールバックされる。<br> <br><br> ==…」) |
細 (文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…) |
||
(同じ利用者による、間の1版が非表示) | |||
36行目: | 36行目: | ||
COMMIT; | COMMIT; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | |||
このように、<u>一連の処理が全て完了する場合のみ実行されるもの</u>がトランザクション処理である。<br> | |||
<br><br> | <br><br> | ||
49行目: | 51行目: | ||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:MySQL]] | [[カテゴリ:MySQL]] |
2024年11月10日 (日) 15:55時点における最新版
概要
トランザクションとは、複数の処理を1つにまとめることである。
例えば、A -> B ->Cという順にフローが進む時、A、B、Cが全て問題なく実行可能な場合のみ同時に実行することをトランザクション処理という。
AとBの処理は成功したがCの処理に失敗した場合は、AおよびBの処理も実行されずロールバックされる。
トランザクション処理
START TRANSACTION
文、または、BEGIN
文は、新しいトランザクションを開始する。COMMIT
文は、現在のトランザクションをコミットして、その変更を永続的なものにする。ROLLBACK
文は、現在のトランザクションをロールバックして、その変更を取り消す。SET autocommit
文は、現在のセッションのデフォルトの自動コミットモードを有効または無効にする。
デフォルトでは、MySQLは自動コミットモードが有効の状態で動作する。
したがって、トランザクション内ではない場合、各ステートメントはSTART TRANSACTION
文およびCOMMIT
文で囲まれているかのようにアトミックである。
ROLLBACK
文を使用して処理を元に戻すことはできないが、ステートメントの実行中にエラーが発生した場合、ステートメントはロールバックされる。
一連のステートメントに対して自動コミットモードを暗黙的に無効にするには、START TRANSACTION
文を使用する。
START TRANSACTION
文を実行する時、そのトランザクションをCOMMIT
文またはROLLBACK
文で終了するまで、自動コミットは無効のままとなる。
その後、自動コミットモードはその以前の状態に戻る。
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
複数の実行する処理をSTART TRANSACTION
文またはBEGIN
文とCOMMIT
文またはROLLBACK
文で囲む。
以下の例では、全ての処理がエラー無く完了する場合のみコミットされる。
もし、いずれかにおいてエラーが発生する場合は、コミットされずに自動的にロールバックされる。
START TRANSACTION;
-- <処理 1>;
-- <処理 2>;
COMMIT;
このように、一連の処理が全て完了する場合のみ実行されるものがトランザクション処理である。
自動コミットモード
自動コミットモードを明示的に無効にするには、変数autocommit
を0
に設定する。
ただし、自動コミットモードを無効にした場合、データベースやテーブルの変更において、トランザクションセーフテーブル (InnoDBまたはNDBのテーブル等) への変更が永続的になることはない。
COMMIT
文を使用して変更をディスクに格納する、または、ROLLBACK
文を使用して変更を無視する必要がある。
SET autocommit=0;
変数autocommit
はセッション変数であるため、セッションごとに設定する必要がある。