study 20131009

47
MySQLの トランザクション 2013/10/09 藤井 1

Upload: fujiit

Post on 14-Jul-2015

1.504 views

Category:

Education


0 download

TRANSCRIPT

MySQLのトランザクション

2013/10/09 藤井

1

- INDEX -1.トランザクションとは2.ストレージエンジン3.トランザクションの開始と終了4.ACID特性5.オートコミット

2

1.トランザクションとは

3

トランザクションとは✴ 1つ以上のDMLをひとかたまりにまとめたもの

4

トランザクションとは✴ 1つ以上のDMLをひとかたまりにまとめたもの

✴ Data Manipulation Language:

データ操作言語

✴ 既存のテーブルを操作する

✴ SELECT(検索), INSERT(挿入), UPDATE(更新), DELETE(削除)

4

逆にDMLではないものって?

5

DDL (Data Definition Language):

データ定義言語

6

DDL (Data Definition Language):

データ定義言語

• データベースやテーブルを作成したり削除したりする

CREATE (作成), DROP (削除), ALTER (変更)

6

DCL (Data Control Language):

データ操作言語

7

• データベースに対して行った変更を確定したり取消したりする。

COMMIT (確定), ROLLBACK (取消),

• また、ユーザーのデータベース操作権限の設定や削除もする。

GRANT (権限付与), REVOKE (権限削除)

DCL (Data Control Language):

データ操作言語

7

2.ストレージエンジン

8

ところで、

DBMSがMySQLのすべてのデータベースで

トランザクションが使えるとは限らない!

9

MySQLでは、テーブルごとに2種類の

ストレージエンジンが選択できる。

10

InnoDB

MySQLでは、テーブルごとに2種類の

ストレージエンジンが選択できる。

10

InnoDB

MySQLでは、テーブルごとに2種類の

ストレージエンジンが選択できる。

MyISAM

10

テーブルを作成した際に設定された

ストレージエンジンを確認する方法

-- admin テーブル作成時のストレージエンジンを確認するmysql> SHOW CREATE TABLE admin CREATE TABLE `admin` ( `id` int(11) NOT NULL AUTO_INCREMENT,中略) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED

11

テーブルを作成した際に設定された

ストレージエンジンを確認する方法

-- admin テーブル作成時のストレージエンジンを確認するmysql> SHOW CREATE TABLE admin CREATE TABLE `admin` ( `id` int(11) NOT NULL AUTO_INCREMENT,中略) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED

11

テーブルが使用しているストレージエンジンを変更する方法

-- admin テーブルのストレージエンジンをMyISAMに設定するmysql> ALTER TABLE admin ENGINE=MyISAM;

12

テーブルが使用しているストレージエンジンを変更する方法

-- admin テーブルのストレージエンジンをMyISAMに設定するmysql> ALTER TABLE admin ENGINE=MyISAM;

12

3.トランザクションの開始と終了

13

• トランザクション開始文;

• 1つ以上のDML文;

• トランザクション終了文;

✴トランザクションの構文

14

• トランザクション開始文;

• 1つ以上のDML文;

• トランザクション終了文;

✴トランザクションの構文BEGIN

BEGIN WORKSTART TRANSACTION

14

• トランザクション開始文;

• 1つ以上のDML文;

• トランザクション終了文;

✴トランザクションの構文BEGIN

BEGIN WORKSTART TRANSACTION

COMMITROLLBACK

14

4.ACID特性

15

4つの大事な約束事SQL標準規格によって定められた、どんなDBMSも守らなければならない一般的なルール

16

4つの大事な約束事SQL標準規格によって定められた、どんなDBMSも守らなければならない一般的なルール

Atomicity - 原子性

16

4つの大事な約束事SQL標準規格によって定められた、どんなDBMSも守らなければならない一般的なルール

Consistency - 一貫性・整合性

Atomicity - 原子性

16

4つの大事な約束事SQL標準規格によって定められた、どんなDBMSも守らなければならない一般的なルール

Consistency - 一貫性・整合性

Isolation - 独立性・隔離性

Atomicity - 原子性

16

4つの大事な約束事SQL標準規格によって定められた、どんなDBMSも守らなければならない一般的なルール

Consistency - 一貫性・整合性

Isolation - 独立性・隔離性Durability - 永続性

Atomicity - 原子性

16

Atomicity - 原子性トランザクションは、それ以上分割することのできない最小の作業単位であるということです。このため、トランザクションを構成する処理の結果がすべて有効になるか、またはすべて無効になるかのいずれかであるということです。例えば、あるトランザクションに処理 A と処理 B があるとします。処理 A と処理 B が正しく実行されたときは両方の処理結果が有効になります。しかし、処理 A だけ、または処理 B だけが正しく実行された場合は、両方の処理結果が無効になります。

引用元:Webアプリ開発エンジニアのためのフィ術情報サイト[テックスコア]http://www.techscore.com/tech/sql/SQL11/11_01.html/

17

Atomicity - 原子性トランザクションは、それ以上分割することのできない最小の作業単位であるということです。このため、トランザクションを構成する処理の結果がすべて有効になるか、またはすべて無効になるかのいずれかであるということです。例えば、あるトランザクションに処理 A と処理 B があるとします。処理 A と処理 B が正しく実行されたときは両方の処理結果が有効になります。しかし、処理 A だけ、または処理 B だけが正しく実行された場合は、両方の処理結果が無効になります。

引用元:Webアプリ開発エンジニアのためのフィ術情報サイト[テックスコア]http://www.techscore.com/tech/sql/SQL11/11_01.html/

俺はやる時はやるぜ。やらない時には全然やらないんだ。中途半端にやるのは許せねえ。

17

Consistency - 一貫性・整合性

データベースに設定された制約を侵して、データの整合性を満たさなくするトランザクションの実行が中断される。例えば、NOT NULL制約のあるカラムにNULLを登録するSQLは一文単位で実行が取消される。つまり、実行されなかった扱いとなる。

18

Consistency - 一貫性・整合性

データベースに設定された制約を侵して、データの整合性を満たさなくするトランザクションの実行が中断される。例えば、NOT NULL制約のあるカラムにNULLを登録するSQLは一文単位で実行が取消される。つまり、実行されなかった扱いとなる。

データベースに設定された制約には、トランザクションの中でも当然従ってもらうぜ。

従わねえ奴には消えてもらう。

18

Isolation - 独立性・隔離性

処理対象が同じトランザクションが複数同時に実行される場合、お互いに情報が隔離・隠蔽された状態でデータの変更が行われる。例えば同じデータに変更を加える、トランザクションAとBが同時に実行される場合、トランザクションAが変更中のデータをBが更に変更を加えることはできず、トランザクションAが完了し、データが確定してからBの変更がなされる。

19

Isolation - 独立性・隔離性

処理対象が同じトランザクションが複数同時に実行される場合、お互いに情報が隔離・隠蔽された状態でデータの変更が行われる。例えば同じデータに変更を加える、トランザクションAとBが同時に実行される場合、トランザクションAが変更中のデータをBが更に変更を加えることはできず、トランザクションAが完了し、データが確定してからBの変更がなされる。

おっと、一度に処理できるトランザクションは

ひとつまでだ。すまないが、並んでくれ。

19

Durability - 永続性

コミットまたはロールバックにより、トランザクションが終了した段階で、その状態が保存される。たとえシステム障害によりデータが失われたとしても、この永続性によりデータの復旧が可能となる。具体的な方法として、トランザクションの実行記録をログとして保存しておき、そのログを使って障害前の状態に復旧する。

20

Durability - 永続性

コミットまたはロールバックにより、トランザクションが終了した段階で、その状態が保存される。たとえシステム障害によりデータが失われたとしても、この永続性によりデータの復旧が可能となる。具体的な方法として、トランザクションの実行記録をログとして保存しておき、そのログを使って障害前の状態に復旧する。

永遠が約束されたものがあるかって?

…俺たちにはログがあるじゃないか。

20

5.オートコミット

21

MySQLではトランザクションを開始せずに、DML文を実行した場合、その都度COMMITを実行しなくてもそのDML文による更新が反映される。

22

つまり、MySQLでは明示的にトランザクションを開始しないと、一文ごとに自動的にCOMMITされ、処理が確定される。

この機能を        と呼ぶ。

23

つまり、MySQLでは明示的にトランザクションを開始しないと、一文ごとに自動的にCOMMITされ、処理が確定される。

この機能を        と呼ぶ。オートコミット

23

オートコミットの設定を確認する方法

mysql> SELECT @@autocommit;

24

オートコミットの設定を確認する方法

mysql> SELECT @@autocommit;+--------------+| @@autocommit |+--------------+| 1 | +--------------+

24

オートコミットの設定を確認する方法

mysql> SELECT @@autocommit;

0:無効1:有効

+--------------+| @@autocommit |+--------------+| 1 | +--------------+

24

オートコミットの設定を変更する方法

-- 非自動コミットモードに設定する方法mysql> SET AUTOCOMMIT=0;

25

- まとめ -1.トランザクションとは2.ストレージエンジン3.トランザクションの開始と終了4.ACID特性5.オートコミット

26

That’s all.

Thank you for your attention.

27