突っ走り書き

見せるほどのものでは..

MySQLの復習@2日目

カラムの変更

カラムのデータ型を変更

カラムの順番を変えるときも ALTER TABLE コマンドを使う.

ALTER TABLE [tab] MODIFY [col] [dtype];

カラムを追加
# 末尾に追加
ALTER TABLE [tab] ADD [col] [dtype];
# 先頭に追加
ALTER TABLE [tab] ADD [col] [dtype] FIRST;
# カラム a の後ろに追加
ALTER TABLE [tab] ADD [col] [dtype] AFTER a;

カラムの順番を変更
# 先頭に追加
ALTER TABLE [tab] MODIFY [col] [dtype] FIRST;
# カラム a の後ろに追加
ALTER TABLE [tab] MODIFY [col] [dtype] AFTER a;

カラム名とカラムのデータ型を変更する
ALTER TABLE [tab] CHANGE [src-col] [dst-col] [dst-dtype];

カラムを削除する
ALTER TABLE [tab] DROP [col];

カラムのデフォルト値を設定
# テーブル作成時に設定
CREATE TABLE [tab] (... [col] [dtype] DEFAULT [value]...)
# テーブル作成後に変更
ALTER TABLE [tab] [col] [dtype] DEFAULT [value]

プロンプトの変更

  • \d: データベース名
  • \h: ホスト名
  • \u: ユーザー名

prompt \d:\h> 

キー関連

主キーの設定

主キー(primary key) は

  • 値の重複を許さない
  • NLLLを許さない

ような属性である.

CREATE TABLE [tab] (... [col] [dtype] PRIMARY KEY ...)
CREATE TABLE [tab] (... [col] [dtype] KEY ...)

実際に実行してみる.

mysql> CREATE TABLE pkey (no INT PRIMARY KEY, str VARCHAR(10));
Query OK, 0 rows affected (0.13 sec)

mysql> DESC pkey;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int(11)     | NO   | PRI | NULL    |       |
| str   | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


一意キーの設定

一意キー(unique key) は

  • 値の重複を許さない

属性である.

CREATE TABLE uni(... [col] [dtype] UNIQUE ...);

実際に実行してみる.

mysql> CREATE TABLE ukey (no INT UNIQUE, str VARCHAR(10));
Query OK, 0 rows affected (0.12 sec)

mysql> DESC ukey;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int(11)     | YES  | UNI | NULL    |       |
| str   | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

自動で番号をふる

自動連続番号の設定

カラムに以下の定義が必要

  • 整数型のデータ型を指定する
  • AUTO_INCREMENT をつける
  • primary key または unique key にする

# テーブル作成時に指定
CREATE TABLE [tab] (a INT AUTO-INCREMENT PRIMARY KEY)
CREATE TABLE [tab] (a INT AUTO-INCREMENT UNIQUE)
# テーブル作成後に変更
ALTER TABLE [tab] MODIFY no INT AUTO_INCREMENT PRIMARY KEY;
ALTER TABLE [tab] MODIFY no INT AUTO_INCREMENT UNIQUE;

実際に実行してみる.

mysql> CREATE TABLE member (no INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30));
Query OK, 0 rows affected (0.11 sec)

mysql> DESC member;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| no    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(30) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

期値を設定する

なぜか上手く動かなかった...

ALTER TABLE [tab] AUTO_INCREMENT=0;

インデックス

インデックスの設定
CREATE INDEX [ind] ON [tab]([col]);

インデックスの表示
SHOW INDEX FROM [tab];
SHOW INDEX FROM [tab] \G

インデックスの削除
DROP INDEX [ind] ON [tab];