列の追加
1列だけ追加する場合は、追加する位置をテーブルの先頭か特定の列の後ろが指定できます。明示的に指定しない場合は最後の列の後ろに列が追加されます。
ALTER TABLE テーブル名 ADD [COLUMN] 列名 列の定義 [FIRST | AFTER 既存の列名]
列の定義には、データ型や必要に応じてデフォルト値、文字コードの指定を行います。
列名と列の定義の組み合わせを括弧内で指定すると、複数の列をまとめて追加することもできますが、この場合は追加する位置を指定できず、自動的にテーブルの最後に追加されます。
なお、既存の行での追加された列には、追加された列の定義によって格納される値が異なります。
- デフォルト値が設定されている場合:デフォルト値
- デフォルト値が設定されておらず、NOT NULLでない場合:NULL
- デフォルト値が設定されておらず、NOT NULLの場合:該当するデータ型の初期値
3番目の場合、データ型によってどの値が入るかが異なるので注意が必要です。数値型の場合は0が、文字列型の場合には長さゼロの文字列が格納されます。
mysql> CREATE TABLE mini_cont SELECT Name, Population FROM Country; Query OK, 239 rows affected (0.01 sec) Records: 239 Duplicates: 0 Warnings: 0 mysql> DESC mini_cont; +------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+----------+------+-----+---------+-------+ | Name | char(52) | NO | | | | | Population | int(11) | NO | | 0 | | +------------+----------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> ALTER TABLE mini_cont ADD Id INT(6) NOT NULL DEFAULT 100; Query OK, 239 rows affected (0.02 sec) Records: 239 Duplicates: 0 Warnings: 0 mysql> DESC mini_cont; +------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+----------+------+-----+---------+-------+ | Name | char(52) | NO | | | | | Population | int(11) | NO | | 0 | | | Id | int(6) | NO | | 100 | | +------------+----------+------+-----+---------+-------+ 3 rows in set (0.01 sec) mysql> SELECT * FROM mini_cont LIMIT 2; +----------------------+------------+-----+ | Name | Population | Id | +----------------------+------------+-----+ | Afghanistan | 22720000 | 100 | | Netherlands | 15864000 | 100 | +----------------------+------------+-----+ 2 rows in set (0.00 sec)
列の削除
ALTER TABLE テーブル名 DROP [COLUMN] 列名