第16回 テーブル定義の変更と応用練習 - MySQL講座
サカイ先生のMySQL講座
Lecutures on PHP
第16回 テーブル定義の変更と応用練習 (その2)
都道府県テーブル定義の変更(変更編)
- テーブル定義変更の方針が決まったところで実際にテーブル定義を変更しよう。
最初に見せた手順でいうと「3. テーブル定義の変更」だね。テーブル定義の変更には ALTER TABLE 文を使うんだ。マニュアルを見てみようか。
- なんだかすごいのが並んでいますね。ぱっと見では何が何だか・・・・
- 要するに一番上の構文だけを見たらいいんだよ。
ALTER [IGNORE] TABLE tbl_name
alter_specification [, alter_specification] ...
ALTER に続いて IGNORE というのがあってもなくてもいい。 [ ] っていうのはそういう意味だね。 その次に TABLE そして tbl_name はテーブル名。そして alter_specification がコンマ区切りで1個以上続くという構文だ。
- alter_specification というのは、、、あ、マニュアルのその下のほうに書いてありますね。
- そう。 | は OR (オア)の意味だから、alter_specification の部分にこの中のどれかを指定できるという意味になるわけだね。今回はカラム追加をしたいから、それっぽいところを探すと、これだ。
| ADD [COLUMN] col_name column_definition
[FIRST | AFTER col_name ]
| ADD [COLUMN] (col_name column_definition,...)
- どちらを使ってもいいけど、今回はカラム1つなので上のほうを使ってみようか。
- ここまでを続けて書くと、 ALTER [IGNORE] TABLE tbl_name ADD [COLUMN] colname column_definition [FIRST | AFTER col_name] ですね。
- そう。よく使う形としては ALTER TABLE tbl_name ADD COLUMN colname colmn_definition; だね。カラムを追加する位置を指定したい場合は AFTER col_name を指定できるけど、今回はカラム列の一番後ろに population カラムを追加したいのでこの部分も省略して構わない。
- COLUMN という部分も省略可能みたいですけど、今回わざわざ指定している理由はなんですか?
- 好み、だね(笑)。他の ADD のところを見てもらうとわかると思うけど、ADDってインデックスや制約など色々なものを追加できるんだ。今回の場合は「カラムを」追加したいのだということを明示した方がわかりやすいと僕は思っているので、ADD COLUMN と明示するようにしているってわけさ。
- なるほど。ではこの構文を使って prefecture テーブルに、人口情報を格納する population カラムを int 型で追加します!
mysql> ALTER TABLE prefecture ADD COLUMN population int;
Query OK, 47 rows affected (0.30 sec)
Records: 47 Duplicates: 0 Warnings: 0
- やりました!なんか手応えがあります!47 rows affected ってところが特に(笑)。
- prefecture テーブルの定義が変わったか、確認してみようか。
- そうですね。 DESC で確認してみることにします。
mysql> DESC prefecture;
+------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+
| code | char(2) | NO | PRI | NULL | |
| name | varchar(4) | NO | MUL | NULL | |
| population | int(11) | YES | | NULL | |
+------------+------------+------+-----+---------+-------+
3 rows in set (0.06 sec)
- ちゃんと population カラムが追加されました。





ページのトップへ


kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。