MySQL/dbonline/database

Last-modified: 2010-10-21 (木) 14:04:28

データベース関連

データベースのフォーマット

 ・my.iniの #Path to the database root で指定したフォルダに、
  データベースが格納される。
  ※デフォルトでは、C:/Program Files/...ではなく、C:/ProgramData/...になっているので注意
   (インストールフォルダと違うフォルダに格納されるので見つけづらい)
 
 ・データベースごとにフォルダになっている
  ※ただし、information_schemaというデータベースは
   他のすべてのデータベースに関する情報を保存しており、
   フォルダを持っていない
 
 ・データベースをdropすると、フォルダも削除される
 
 ・フォルダの中のdb.optは、文字コードや照合順序などの
  データベースに関するオプションが記述されている

MyISAMのテーブル 

 ・テーブルは、MyISAM型の場合、以下のように保存される

 table_name.frm テーブル定義の保存
 table_nam.MYD テーブルデータの保存
 table_nam.MYI インデックスの保存

  で保存されているが、中身は暗号化されているようだ

  テーブルを削除すると、これらはすべて削除される

InnoDBのテーブル 

 ・テーブルは、InnoDBの場合は、以下のように保存される

  table_name.frm テーブル定義の保存

  上記に加えて、データディレクトリ(データベース毎のフォルダではなく、
  それらのフォルダの上のフォルダ)に以下のデータが作成される。

  ibdata1  テーブルデータやインデックスの保存
  ib_logfile0 トランザクションログファイル
  ib_logfile1  トランザクションログファイル

  つまり、InnoDBでは、テーブル毎に作成されるテーブル定義ファイル以外は
  InnoDB型のテーブルのデータは共通のファイルを使って管理される。

  トランザクションファイルの数は上記では2つで、ローテーションして使用される。

  テーブルを削除すると、table_name.frmは削除されるが、それ以外の、データは残ったままになる。
  (InnoDBで共有して使っているため)

データベースの作成

 CREATE DATABASE db_name;

 ※db_nameにコーテーションはいらない
 ※Windowsの場合、大文字と小文字は区別されない
 ※データベース名は64バイトまで
 
 既存のデータベースと同名を入れるとエラーになる。
 エラーを出さないためには以下のようにする。

 CREATE DATABASE IF NOT EXISTS db_name;

 ※結果に違いは生じないが、show warnings;でキャッチできるようになる

文字セットと照合順序を指定してデータベースを作成する方法

 CREATE DATABASE db_name CHARACTER SET charset_name COLLATE collation_name;

 ※文字セットと照合順序はどちらか片方のみ指定してもOK

データベースの一覧取得

 SHOW DATABASES;

 ※

 SHOW CREATE DATABASE db_name;

  とすると、既存のdb_nameの文字コードを調べることができる
  (既存のデータベースになければエラーとなる)

 ※

 SELECT * FROM INFORMATION_SCHEMA.SCHEMATA;

  とすると、各データベースの情報を得ることができる
  #「DB名.テーブル名」は、useでDB名を指定していないときにテーブルにアクセスするときの記法

データベースへの接続

 USE db_name;

 ※接続というのは、DB名を省略したときに使われる
  デフォルトのDB名を設定するということ

 ※

 mysql -u root -p db_name

  のように起動時にDB名を指定することも可能

 ※

 mysql> select database();

  で現在、接続中のDB名を知ることが可能

データベースの削除

 DROP DATABASE db_name;

 ※

 DROP DATABASE IF EXISTS db_name;

  とすれば、db_nameが存在していなくてもエラーにならない
  (show warnings;でキャッチできる)

データベースの属性変更

 ※属性とは、文字セットと照合順序のこと

 ALTER DATABASE db_name CHARACTER SET charset_name COLLATE collation_name;

 ※ただし、挿入済みのデータに関しての文字セットに関しては変更されない(あくまで変更後に挿入したデータが対象)

 ※文字セットと照合順序はどちらか片方のみ指定してもOK