Search

カラムの追加(最後)

unknown

ALTER [IGNORE] TABLE テーブル名 ADD 追加カラム名 追加カラムの型;

フィールドの末尾に新しいカラムを追加します。

IGNOREを指定すると、ユニークキーの重複があった場合、最初のレコードを使用し、他の重複レコードを削除します。

# データベース選択
mysql> use db_User Enter
Database changed
# テーブル構造確認
mysql> DESCRIBE tbl_Address; Enter
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Zip   | varchar(8)  |      |     |         |       |
| Ken   | varchar(10) |      |     |         |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

# フィールドの末尾に「Email」フィールドを追加
mysql> ALTER TABLE tbl_Address ADD Email VARCHAR(80) DEFAULT NULL; Enter
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 追加されているか確認
mysql> DESCRIBE tbl_Address; Enter
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Zip   | varchar(8)  |      |     |         |       |
| Ken   | varchar(10) |      |     |         |       |
| Email | varchar(80) | YES  |     | NULL    |       | ←末尾に追加
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql>

カラムの追加(先頭)
FIRST

unknown

ALTER [IGNORE] TABLE テーブル名 ADD 追加カラム名 追加カラム型 FIRST;

フィールドの先頭に新しいカラムを追加します。

IGNOREを指定すると、ユニークキーの重複があった場合、最初のレコードを使用し、他の重複レコードを削除します。

# データベース選択
mysql> USE db_User Enter
Database changed

# テーブル構造確認
mysql> DESCRIBE tbl_Address; Enter
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Zip   | varchar(8)  |      |     |         |       |
| Ken   | varchar(10) |      |     |         |       |
| Email | varchar(80) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

# フィールドの先頭に「UserID」フィールドを追加
# 以下では、主キー属性も指定
mysql> ALTER TABLE tbl_Address ADD UserID VARCHAR(8) PRIMARY KEY FIRST; Enter
Query OK, 0 rows affected (0.22 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 追加されているか確認
mysql> DESCRIBE tbl_Address; Enter
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| UserID | varchar(8)  |      | PRI |         |       | ←先頭に追加
| Zip    | varchar(8)  |      |     |         |       |
| Ken    | varchar(10) |      |     |         |       |
| Email  | varchar(80) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql>

カラムの追加(任意の位置)
AFTER

unknown

ALTER TABLE テーブル名 ADD 追加カラム名 追加カラム型 AFTER カラム名;

指定したカラムの後に新しいカラムを挿入します。

mysql> USE db_User Enter
Database changed

# テーブル構造確認
mysql> DESCRIBE tbl_Address; Enter
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| UserID | varchar(8)  |      | PRI |         |       |
| Zip    | varchar(8)  |      |     |         |       |
| Ken    | varchar(10) |      |     |         |       |
| Email  | varchar(80) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

# 「Ken」フィールドの後に、「Addr」フィールドを追加
mysql> ALTER TABLE tbl_Address ADD Addr VARCHAR(100) AFTER Ken; Enter
Query OK, 0 rows affected (0.47 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 追加されているか確認
mysql> DESCRIBE tbl_Address; Enter
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| UserID | varchar(8)   |      | PRI |         |       |
| Zip    | varchar(8)   |      |     |         |       |
| Ken    | varchar(10)  |      |     |         |       |
| Addr   | varchar(100) | YES  |     | NULL    |       | ←追加
| Email  | varchar(80)  | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql>

カラム削除
DROP COLUMN

unknown

ALTER TABLE テーブル名 DROP COLUMN カラム名;

指定したカラムをテーブルから削除します。

# データベース選択
mysql> USE db_User Enter
Database changed

# テーブル構造確認
mysql> DESCRIBE tbl_Address; Enter
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| UserID | varchar(8)   |      | PRI |         |       |
| Zip    | varchar(8)   |      |     |         |       |
| Ken    | varchar(10)  |      |     |         |       |
| Addr   | varchar(100) | YES  |     | NULL    |       |
| Email  | varchar(80)  | YES  |     | NULL    |       | →削除
+--------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

# 「Email」フィールドを削除
mysql> ALTER TABLE tbl_Address DROP COLUMN Email; Enter
Query OK, 0 rows affected (0.23 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 削除されているか確認
mysql> DESCRIBE tbl_Address; Enter
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| UserID | varchar(8)   |      | PRI |         |       |
| Zip    | varchar(8)   |      |     |         |       |
| Ken    | varchar(10)  |      |     |         |       |
| Addr   | varchar(100) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql>

カラムの型を変更

unknown

ALTER TABLE テーブル名 CHANGE 旧カラム名 新カラム名 カラム型 デフォルト値;
または
ALTER TABLE テーブル名 MODIFY [COLUMN] カラム名 新カラム型;

カラムの型を変更します。

CHANGE文では、カラム名は変更せず、型のみ変更する場合でも、旧カラム名と新カラム名の両方を(たとえ同じであっても)指定して変更する必要がありました。

しかし、MySQL 3.22.16a 以降からは、MODIFYを使用することで、無意味なカラム名の変更をせずに、カラム型だけを変更できるようになりました。

# データベース選択
mysql> USE db_User Enter
Database changed

# テーブル構造確認
mysql> DESCRIBE tbl_Address; Enter
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| UserID | varchar(8)   |      | PRI |         |       |
| Zip    | varchar(8)   |      |     |         |       | →フィールド型変更
| Ken    | varchar(10)  |      |     |         |       |
| Addr   | varchar(100) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

##### フィールド型変更(1)
# 「Zip」フィールドのフィールド型を数値型 INT(11) に変更
mysql> ALTER TABLE tbl_Address CHANGE Zip Zip  INT(11) DEFAULT NULL; Enter
Query OK, 0 rows affected (0.48 sec)
Records: 0  Duplicates: 0  Warnings: 0

# フィールド型が変更されているか確認
mysql> DESCRIBE tbl_Address; Enter
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| UserID | varchar(8)   |      | PRI |         |       |
| Zip    | int(11)      | YES  |     | NULL    |       | ←変更されている
| Ken    | varchar(10)  |      |     |         |       |
| Addr   | varchar(100) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

##### フィールド型変更(2)
# 「Zip」フィールドのフィールド型を文字列型 VARCHAR(8) に変更
mysql> ALTER TABLE tbl_Address MODIFY Zip VARCHAR(8); Enter
Query OK, 0 rows affected (0.50 sec)
Records: 0  Duplicates: 0  Warnings: 0

# フィールド型が変更されているか確認
mysql> DESCRIBE tbl_Address; Enter
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| UserID | varchar(8)   |      | PRI |         |       |
| Zip    | varchar(8)   | YES  |     | NULL    |       | ←変更されている
| Ken    | varchar(10)  |      |     |         |       |
| Addr   | varchar(100) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql>

カラムの名前を変更

unknown

ALTER [IGNORE] TABLE テーブル名
CHANGE [COLUMN] 旧カラム名 新カラム名 カラム型 [デフォルト値];
または
ALTER TABLE テーブル名 CHANGE 旧カラム名 新カラム名;

カラムの名前を変更します。

IGNOREを指定すると、ユニークキーの重複があった場合、最初のレコードを使用し、他の重複レコードを削除します。

# tbl_Addressテーブルのフィールドを確認
mysql> DESCRIBE tbl_Address; Enter
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| UserID | int(11)      | YES  |     | NULL    |       |
| Zip    | varchar(8)   | YES  |     | NULL    |       | →カラム名変更
| Ken    | varchar(5)   | YES  |     | NULL    |       |
| Addr   | varchar(200) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

# 例: Zipフィールドのフィールド名を、ZipCode に変更
mysql> ALTER TABLE tbl_Address CHANGE Zip ZipCode varchar(8); Enter
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

# カラム名が変更されたか確認
mysql> DESCRIBE tbl_Address; Enter
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| UserID  | int(11)      | YES  |     | NULL    |       |
| ZipCode | varchar(8)   | YES  |     | NULL    |       |
| Ken     | varchar(5)   | YES  |     | NULL    |       |
| Addr    | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

カラムの名前と型を一緒に変更

unknown

ALTER TABLE テーブル名
CHANGE COLUMN 旧カラム名 新カラム名 新カラム型
[, CHANGE ... ];

カラムの名前と型を一緒に変更します。
複数のカラムの名前と型を変更する場合は、CHANGE文をカンマ区切りで指定します。

例: カラムの名前と型を変更
# tbl_Addressテーブルのフィールドを確認
mysql> DESCRIBE tbl_Address; Enter
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| UserID  | int(11)      | YES  |     | NULL    |       |
| Zipcode | varchar(8)   | YES  |     | NULL    |       | →名前と型を変更
| Ken     | varchar(5)   | YES  |     | NULL    |       |
| Addr    | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

# ZipCodeフィールドの名前を Zipに、型を 文字列型→数値型 integer に変更
mysql> ALTER TABLE tbl_Address CHANGE ZipCode Zip integer; Enter
Query OK, 0 rows affected (0.14 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE tbl_Address; Enter
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| UserID | int(11)      | YES  |     | NULL    |       |
| Zip    | int(11)      | YES  |     | NULL    |       |
| Ken    | varchar(5)   | YES  |     | NULL    |       |
| Addr   | varchar(200) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
例: 複数のカラムの名前や型を変更
# tbl_Addressのフィールドを確認
mysql> DESCRIBE tbl_Address; Enter
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| UserID  | int(11)      | YES  |     | NULL    |       |
| ZipCode | tinyint(4)   | YES  |     | NULL    |       | →名・型変更
| Ken     | varchar(5)   | YES  |     | NULL    |       |
| Address | varchar(100) | YES  |     | NULL    |       | →名・型変更
+---------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

# ZipCodeフィールドの名前をZipに、型をintegerに変更
# Addressフィールドの名前をAddrに、型をvarchar(200)に変更
mysql> ALTER TABLE tbl_address Enter
    -> CHANGE ZipCode Zip integer, Enter
    -> CHANGE Address Addr varchar(200); Enter
Query OK, 0 rows affected (0.49 sec)
Records: 0  Duplicates: 0  Warnings: 0

# 型・名前が変更されたか確認
mysql> DESCRIBE tbl_Address; Enter
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| UserID | int(11)      | YES  |     | NULL    |       |
| Zip    | int(11)      | YES  |     | NULL    |       |
| Ken    | varchar(5)   | YES  |     | NULL    |       |
| Addr   | varchar(200) | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

フィールド・カラム情報表示
SHOW COLUMNS

unknown

SHOW [FULL] COLUMNS FROM テーブル名 [LIKE 'ワイルドカード'];
または
SHOW FIELDS FROM テーブル名 [LIKE 'ワールドカード'];
または
[DESCRIBE | DESC] テーブル名 [カラム名 | 'ワイルドカード'];

いずれもカラム情報を表示しますが、多少構文に相違点があります。

SHOW FULL COLUMNS文は、カラム情報に権限情報を含めることができます。
また、ある特定のカラム情報を取得する場合は、DESCRIBE(DESC)文を使用します。

SHOW COLUMNS文の例
# カラム情報を表示
mysql> SHOW COLUMNS FROM tbl_Customer; Enter
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| FirstName | varchar(32) |      |     |         |                |
| LastName  | varchar(32) |      |     |         |                |
| Sex       | char(1)     | YES  |     | NULL    |                |
| Age       | int(11)     | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

# キーワード FULL を付けると、権限情報も表示されます
mysql> SHOW FULL COLUMNS FROM tbl_Customer; Enter
+-----------+-------------+------+-----+---------+----------------+---------------------------------+
| Field     | Type        | Null | Key | Default | Extra          | Privileges                      |
+-----------+-------------+------+-----+---------+----------------+---------------------------------+
| UserID    | int(11)     |      | PRI | NULL    | auto_increment | select,insert,update,references |
| FirstName | varchar(32) |      |     |         |                | select,insert,update,references |
| LastName  | varchar(32) |      |     |         |                | select,insert,update,references |
| Sex       | char(1)     | YES  |     | NULL    |                | select,insert,update,references |
| Age       | int(11)     | YES  |     | NULL    |                | select,insert,update,references |
+-----------+-------------+------+-----+---------+----------------+---------------------------------+
5 rows in set (0.39 sec)

# ワイルドカードの使用例
# フィールド名が、Nameで終るフィールドの情報のみ表示
mysql> SHOW FULL COLUMNS FROM tbl_Customer LIKE '%Name'; Enter
+-----------+-------------+------+-----+---------+-------+---------------------------------+
| Field     | Type        | Null | Key | Default | Extra | Privileges                      |
+-----------+-------------+------+-----+---------+-------+---------------------------------+
| FirstName | varchar(32) |      |     |         |       | select,insert,update,references |
| LastName  | varchar(32) |      |     |         |       | select,insert,update,references |
+-----------+-------------+------+-----+---------+-------+---------------------------------+
2 rows in set (0.06 sec)

データベース未選択の場合はエラーになります。 構文でFROM データベース名.テーブル名; のようにするか、あらかじめUSE文などでデータベースを選択しておく必要があります。

SHOW FIELDS文の例
# 指定したテーブルのフィールド情報表示
mysql> SHOW FIELDS FROM tbl_Customer; Enter
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| UserID    | int(11)     |      | PRI | NULL    | auto_increment |
| FirstName | varchar(32) |      |     |         |                |
| LastName  | varchar(32) |      |     |         |                |
| Sex       | char(1)     | YES  |     | NULL    |                |
| Age       | int(11)     | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
5 rows in set (0.39 sec)

# ワイルドカードの使用例
# フィールド名が、Nameで終るフィールドの情報のみ表示
mysql> SHOW FIELDS FROM tbl_Customer LIKE '%Name'; Enter
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| FirstName | varchar(32) |      |     |         |       |
| LastName  | varchar(32) |      |     |         |       |
+-----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
DESCRIBE文の例
# フィールド情報取得
mysql> DESCRIBE db_Customer.tbl_Customer; Enter
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| UserID    | int(11)     |      | PRI | NULL    | auto_increment |
| FirstName | varchar(32) |      |     |         |                |
| LastName  | varchar(32) |      |     |         |                |
| Sex       | char(1)     | YES  |     | NULL    |                |
| Age       | int(11)     | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

# 指定したフィールドのフィールド情報を取得
mysql> DESCRIBE db_Customer.tbl_Customer userID; Enter
+--------+---------+------+-----+---------+----------------+
| Field  | Type    | Null | Key | Default | Extra          |
+--------+---------+------+-----+---------+----------------+
| UserID | int(11) |      | PRI | NULL    | auto_increment |
+--------+---------+------+-----+---------+----------------+
1 row in set (0.08 sec)

# ワイルドカード使用例(※LIKEは不要!)
# フィールド名が、Nameで終るフィールドの情報のみ表示
mysql> DESCRIBE db_Customer.tbl_Customer '%Name'; Enter
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| FirstName | varchar(32) |      |     |         |       |
| LastName  | varchar(32) |      |     |         |       |
+-----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop