カラム(フィールド):データ定義(SQL文)カラムの作成・削除・情報表示・定義変更
- カラムの追加(最後)
- カラムの追加(先頭)〔FIRST〕
- カラムの追加(任意の位置)〔AFTER〕
- カラム削除〔DROP COLUMN〕
- カラムの型を変更
- カラムの名前を変更
- カラムの名前と型を一緒に変更
- フィールド・カラム情報表示〔SHOW COLUMNS〕
カラムの追加(最後)
unknown
フィールドの末尾に新しいカラムを追加します。
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
フィールドの先頭に新しいカラムを追加します。
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
指定したカラムの後に新しいカラムを挿入します。
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
指定したカラムをテーブルから削除します。
# データベース選択 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 テーブル名 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
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
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 FIELDS FROM テーブル名 [LIKE 'ワールドカード'];
または
[DESCRIBE | DESC] テーブル名 [カラム名 | 'ワイルドカード'];
いずれもカラム情報を表示しますが、多少構文に相違点があります。
SHOW FULL COLUMNS文は、カラム情報に権限情報を含めることができます。
また、ある特定のカラム情報を取得する場合は、DESCRIBE(DESC)文を使用します。
# カラム情報を表示 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文などでデータベースを選択しておく必要があります。
# 指定したテーブルのフィールド情報表示 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)
# フィールド情報取得 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)