SAK 図書館
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 編資料