Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

第8回 MySQL事始 SQL文(5) DDL

edited by DB Online   2011/10/21 00:00

列の変更

 列の変更は以下の3つの構文が利用可能ですが、構文によってできることが異なります。

ALTER TABLE テーブル名 ALTER [COLUMN] 列名 {SET DEFAULT デフォルト値 | DROP DEFAULT}
ALTER TABLE テーブル名 CHANGE [COLUMN] 古い列名 新しい列名 列の定義 [FIRST|AFTER 既存の列名]
ALTER TABLE テーブル名 MODIFY [COLUMN] 列名 列の定義 [FIRST | AFTER 既存の列名]

 ALTERコマンドでは、既存の列のデフォルト値の変更またはデフォルト値の削除ができます。CHANGEコマンドでは列名の変更の他、データ型を含む定義を変更し、さらに列の移動もできます。MODIFYコマンドの場合には列名の変更以外はCHANGEコマンドと同じです。

 データ型などの列の定義を変更した場合、既存の行の値も自動的に新しいデータ型に変更されるため、値がデータ型の範囲外にならないように注意が必要です。以下は人口を表す`Population`列をINT(11)からDECIMAL(11,2)に変更したため、人口が10億を超え、人口の表現に最低10桁の整数が必要な中国とインドのデータが正しくなくなっている例です。

mysql> ALTER TABLE mini_cont MODIFY Population DECIMAL(11,2);
Query OK, 239 rows affected, 2 warnings (0.02 sec)
Records: 239  Duplicates: 0  Warnings: 2

Warning (Code 1264): Out of range value for column 'Population' at row 72
Warning (Code 1264): Out of range value for column 'Population' at row 94

mysql> DESC mini_cont;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| Name       | char(52)      | NO   |     |         |       |
| Population | decimal(11,2) | YES  |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> SELECT * FROM mini_cont WHERE Name LIKE 'Ch%';
+------------------+--------------+
| Name             | Population   |
+------------------+--------------+
| Chile            |  15211000.00 |
| Christmas Island |      2500.00 |
| China            | 999999999.99 |
| Chad             |   7651000.00 |
+------------------+--------------+
4 rows in set (0.01 sec)

インデックスの作成と削除

 インデックスの作成にはALTER TABLE文およびCREATE INDEX文が使用できます。

ALTER TABLE テーブル名 ADD インデックスの種類 インデックス名 (インデックス対象列)
CREATE INDEX インデックス名 ON テーブル名 (インデックス対象列)

 なおALTER TABLEを使用した場合は全てのインデックスが作成できるのに対し、CREATE TABLE文では主キーが作成できない制約があります。

インデックスの削除にはALTER TABLE文およびDROP INDEX文が使用できます。

ALTER TABLE テーブル名 DROP インデックス名
DROP INDEX インデックス名 ON テーブル名

著者プロフィール

  • 梶山隆輔(カジヤマリュウスケ)

    日本オラクル株式会社 MySQL Global Business Unit Asia Pacific & Japan担当 MySQL Principal Sales Consultant オラクル社において、MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコンサルタントチームのアジア太平洋地域リーダー。多国籍なMySQL部門にて、台湾、オーストラリア、インドに在籍するチームメンバーを束ね、アジア太平洋地域の25以上の国や地域でのMySQL普及やビジネスの拡大をミッションとする。  

バックナンバー

連載:MySQL事始

もっと読む

All contents copyright © 2007-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5