SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

MySQL事始

MySQL事始 SQL文(5) DDL

第8回


列の変更

 列の変更は以下の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 テーブル名

次のページ
コラム

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
MySQL事始連載記事一覧

もっと読む

この記事の著者

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

日本オラクル MySQL Global Business Unit Asia Pacific & Japan担当 MySQLソリューション・エンジニアリング・ディレクターオラクル社において、MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコンサルタントチームのアジア太平洋地域リーダー。多国籍なM...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3521 2012/02/10 18:05

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング