【初歩から学ぶMySQL】データベースにおけるストレージエンジンって何?

こんにちは、トイチです。

今回はMySQL勉強中の私がほ~~~んとなったストレージエンジンのお話です。

 

そもそもストレージエンジンとは。

データベースエンジン内でデータの物理的な処理を担当するコンポーネント

だそうです。

はて、さっぱりわからん。

いきなりそんなこと言われてもなトイチです。

細かく見ていきます。

 

・データベースエンジン内でデータの物理的処理

 ‐ これはデータベースに対して、データの格納、管理、検索などの処理を行うことを指します。

コンポーネント

 ‐ ある程度の働きや役割を持ったまとまり、部品のこと。

 - プログラミングの世界ではシステム内で機能する独立した部分のこと。

 

らしいです。

つまりデータベースという箱庭を手入れしてくれる庭職人さんみたいなものですかね。

MySQLにはお抱えの職人さんが数名いらっしゃるようです。

CSVをみて、ほ~んつまりデータを入出力する際の規則が変わるんかなと思いました。(適当)

InnoDB はデフォルトのストレージエンジンで、トランザクション処理をサポートしていて、ACID特性を持っていて高い耐久力と安定性があるみたいです。

 

さっぱりわからん。

まずトランザクション処理って何?です。

データベース管理システム(DBMS)において、一連のデータベース操作をまとめた不可分な単位です。トランザクションは、データベースにおける一貫性や整合性を維持するために使用されます。ACIDプロパティと呼ばれる特性を持っています。

あんましよくわからないので、もうちょっと掘り下げました。

ACIDって何?です。

  1. Atomicity (原子性) : トランザクションは不可分の単位で、全ての操作が成功するか、あるいは何も行われないかのいずれかです。途中でエラーが発生した場合、トランザクション全体がロールバックされ、変更が一切適用されません。

  2. Consistency (一貫性) : トランザクションの実行前と実行後、データベースはある一貫性のある状態になります。あるトランザクションが実行されると、データベースの整合性が崩れないようにします。

  3. Isolation (隔離性) : 複数のトランザクションが同時に実行されても、各トランザクションは他のトランザクションの影響を受けずに、それぞれ独立して実行されるという特性です。これにより、トランザクション同士が競合したり、相互に影響しあったりすることがありません。

  4. Durability (耐久性) : 一度正常に終了したトランザクションの結果は、データベースに永続的に保存され、将来の障害や故障にも耐えるようになっています。データベースの状態はクラッシュしても失われない。

僕なりにまとめました。

  1. 中途半端な処理はしない。やるなら完了、そうでなければ放棄。
  2. 処理前と処理後で、箱庭の形を変えない。咲く花は変えても花壇の位置は変えない。
  3. 畑を混合しない。お互いに干渉しない。ニンジン畑にジャガイモを植えない。
  4. 地震や噴火に遭っても、たくましく育つ箱庭を作る。

途中から作物縛りでしたが大まかこんな感じでしょう。

几帳面且つ完璧主義なInnoDB君がデフォルトなのは頼りがいがあります。(そんな気がします。)

実際動かしてみないと特性なんてわかりませんが。

 

動かしてみる。

前回作ったmytest database にアクセスします。

use mytest;

 - Database changed

 

ストレージエンジンを指定せずにテーブルを作成します。

create table test1(id int);

 - Query OK, 0 rows affected (0.03 sec)

 

作成したテーブルのストレージエンジンを確認します。(デフォルトのInnoDBなはず)

show table status from mytest like 'test1'\G

 - Engine: InnoDB

 

無事OKでした。

ちなみに'test1'の後の\G コマンドは {ego}コマンドの略で、

Send command to mysql server, display result vertically.

つまり各項目が1行ずつ表示され、視認性が良くなるおまじないです。

\Gあり

\Gなし

 

無しだと視認性が悪くてちょっと…って感じでした。

書いてある情報は変わらないんですけどね。

 

デフォルトのストレージエンジンではなく、指定して作成する場合には

create table test2(id int) engine MyISAM;

で指定してやります。

別パターンで、そもそもデフォルトから変更したい場合はおなじみini ファイルの

[mysqld]

default-storage-engine=MYISAM

の様に指定して、サーバーを再起動してやればいいです。

前回と同じ轍は踏みません。今回は。

Winメニューからちゃんと管理者ターミナルに入ってnet stop / net start をかけます。

 

新規のテーブルを作成して、デフォルトが変更されているか確認します。

 

いえ~い、無事に行けましたね。

ちなみにmy.ini ファイルですが、C:\ProgramFiles... ではなく、C:\ProgramData に格納されています。紛らわしいですね。通りでmy.ini 変更しても反映されないなぁとなっていたわけで。

これもいい勉強になりました。

 

今回はここまで。

ありがとうございました。