SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

MySQL 編6 - テーブル作成、制約、項目タイプ、キー作成、順序作成

MySQL の日本語環境設定やトランザクション設定については、
『MySQL 編1 - インストール、ODBC ドライバ、日本語設定、トランザクション設定』
を参照下さい。
初期値では、日本語環境の設定がされていないので文字化けが発生したり、処理
がうまくできません。また、トランザクションもオートコミットのみサポートで、
通常のトランザクションが使用できません。どちらも必ず、環境設定して下さい。

■テーブル作成

  ・項目名に「key」と言う名前を指定すると MySQL ではエラーになる。
    仕方なく「key1」と言う項目名でテストテーブルを作成した。
    また、InnoDB 方法のトランザクションを使用する場合、type=InnoDB を
    指定する。

create table testm (
  key1           char(008)     primary key,
  data1          int8,
  data2          int8,
  data3          int8
) type=InnoDB;

  ・type=InnoDB は、alter table で後から指定することもできる。

create table testm (
  key1           char(008)     primary key,
  data1          int8,
  data2          int8,
  data3          int8
);

alter table testm type=InnoDB;

  ・テーブル作成時に NOT NULL 制約、UNIQUE 制約、DEFAULT 初期値設定を
    指定できる。

create table testm (
  key1           char(008)     primary key,
  data1          int8 not null,
  data2          int8 unique,
  data3          int8 default 0 not null
) type=InnoDB;

  ・constraint でプライマリキーを付けるには、次のようにする。

create table testm (
  key1           char(008),
  data1          int8,
  data2          int8,
  data3          int8,
  constraint KEY_NAME primary key (
    key1,
    data1
  )
) type=InnoDB;

  ・テーブル削除は、次のようにする。

drop table testm;

■項目タイプ(フィールドタイプ)

  ・MySQL 項目型

    int / integer    4 バイト整数
    smailint         2 バイト整数
    bigint / int8    8 バイト整数
    float            浮動小数点
    double / real    倍精度浮動小数点
    date             日付
    time             時間
    timestamp        日付時間
    char(文字数)     固定長文字列  (最大 256 文字)
    varchar(文字数)  可変長文字列  (最大 256 文字)
    text             ラージ文字列  (最大 65535 文字)
    mediumtext       ラージ文字列  (最大 16777215 文字)
    largetext        ラージ文字列  (最大 4294967295 文字)
    blob             ラージバイナリ(最大 65535 bytes)
    mediumblob       ラージバイナリ(最大 16777215 bytes)
    largeblob        ラージバイナリ(最大 4294967295 bytes)

■キー作成

  ・単項目のキー設定は、テーブル作成時の create 文で行うと良い。
    項目定義に primary key を指定するだけである。

  key1           char(008)     primary key,

  ・複合キーは、テーブル作成後に別途 alter 文でも追加できる。

create table testm (
  key1           char(008),
  key2           char(008),
  data1          int8,
  data2          int8,
  data3          int8
) type=InnoDB;

alter table testm add primary key (
    key1,
    key2
);

  ・constraint で、主キーを追加するには、次のようにする。

alter table testm add
constraint KEY_NAME primary key (
    key1,
    key2
);

  ・主キー以外にいくつでも副キー索引を作成できる。
    create index で作成するが、ユニークでない重複キーも作れる。
    頻繁に使われるクエリのキーは作成しておくと、レスポンスが著しく違う。
    但し、あまりキー(索引) を作りすぎてもいけない。
    更新時に索引の更新負荷が増大することになる。
    従って、問い合わせクエリを意識した最小限で、かつ、高速アクセスとなる
    索引を設計する。
    また、where 句や order by 句にキーを含めて指定するようにする。
    データベースの更新や問い合わせに異様に時間がかかるのは、キーの指定が
    されていないからである。

  ・create tabble 時の primary key は、システムが自動的に索引を作成する
    ので、手作業で別途作成する必要はない。
    それ以外の副キーは、次のように作成する。
    unique 指定がなければ重複可となる。

create unique index KEY_NAME on testm (
  key1,
  data1
);

create index KEY_NAME on testm (
  key1,
  data1
);

  ・索引の削除は、次のようにする。

drop index KEY_NAME on testm;

■順序作成(オートナンバー)

  ・順序は、auto_increment と定義することで利用できる。
    昔の MySQL と仕様が変わった? (それとも私の古い資料が間違っている?)
    構文も違うし、キー指定しないとエラーでダメであった。

create table testm (
  key1           smallint unsigned not null auto_increment primary key,
  data1          int8,
  data2          int8,
  data3          int8
) type=InnoDB;

insert into testm (data1) values (100);
insert into testm (data1) values (200);

+------+-------+-------+-------+
| key1 | data1 | data2 | data3 |
+------+-------+-------+-------+
|    1 |   100 |  NULL |  NULL |
|    2 |   200 |  NULL |  NULL |
+------+-------+-------+-------+

  ・Oracle と同じ順序のような create sequence はないようである。

■MySQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK