MySQLテーブルのカラムのデータ型を変更する方法【ALTER TABLE MODIFY活用】
MySQLでカラムのデータ型を変更するには?
MySQLでは、ALTER TABLE文のMODIFY句を使うことで、既存テーブルのカラム(列)のデータ型を後から変更できます。この記事では、実際にテーブルを作成し、varchar型のカラムをBIGINT型へ変更する手順を順番に解説します。
1. サンプルテーブルを作成する
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable
(
StudentId varchar(200) not null,
StudentName varchar(20),
StudentAge int,
StudentAddress varchar(20),
StudentCountryName varchar(20)
);
Query OK, 0 rows affected (0.73 sec)2. 現在のテーブル構造を確認する
DESC文(DESCRIBE文)を実行すると、各カラムの定義を一覧で確認できます。
mysql> desc DemoTable;
実行すると、次のような出力が得られます。
+--------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------+--------------+------+-----+---------+-------+ | StudentId | varchar(200) | NO | | NULL | | | StudentName | varchar(20) | YES | | NULL | | | StudentAge | int(11) | YES | | NULL | | | StudentAddress | varchar(20) | YES | | NULL | | | StudentCountryName | varchar(20) | YES | | NULL | | +--------------------+--------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
この時点で「StudentId」はvarchar(200)型として定義されていることがわかります。
3. ALTER TABLE ... MODIFY でデータ型を変更する
ここからが本題です。以下のクエリを実行すると、「StudentId」カラムのデータ型をvarcharからBIGINTへ変更できます。
mysql> alter table DemoTable modify StudentId BIGINT(10) UNSIGNED NOT NULL DEFAULT 0; Query OK, 0 rows affected (1.51 sec) Records: 0 Duplicates: 0 Warnings: 0
上記の例では、「StudentId」カラムのデータ型をvarchar(200)からBIGINT(10)に変更しました。あわせて、UNSIGNED(符号なし)・NOT NULL・デフォルト値0も指定しています。
4. 変更後のテーブル構造を確認する
もう一度DESC文を実行して、変更が正しく反映されたか確認しましょう。
mysql> desc DemoTable;
実行結果は以下のとおりです。
+--------------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------+---------------------+------+-----+---------+-------+ | StudentId | bigint(10) unsigned | NO | | 0 | | | StudentName | varchar(20) | YES | | NULL | | | StudentAge | int(11) | YES | | NULL | | | StudentAddress | varchar(20) | YES | | NULL | | | StudentCountryName | varchar(20) | YES | | NULL | | +--------------------+---------------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
「StudentId」の型が「bigint(10) unsigned」に変わっていることが確認できました。
まとめと注意点
- カラムのデータ型を変更する基本構文は
ALTER TABLE テーブル名 MODIFY カラム名 新しいデータ型;です。 - 注意: 既存データが含まれるカラムの型を変更する場合、変換できないデータがあるとエラーになったり、データが失われたりする可能性があります。事前にバックアップを取るか、トランザクション内で検証することをおすすめします。
- MySQL 8.0以降では表示幅(例:INT(11)、BIGINT(10))は非推奨となっているため、新しい環境では単に
BIGINT UNSIGNEDのように指定するのが良いでしょう。
-
MySQLでVARCHAR型のカラムをNULL許容に変更する方法
MySQLでは、テーブルのカラム定義を後から変更できます。既存のVARCHAR型カラムをNULL値を許容する設定に変更したい場合は、ALTER TABLE文とCHANGE句を組み合わせて使用します。基本構文カラムをNULL許容に変更するには、以下の構文を使用します。ALTER TABLE テーブル名 CHANGE 変更前カラム名 変更後カラム名 データ型 NULL DEFAULT NULL;ポイントは、CHANGE句の後に「現在のカラム名」と「新しいカラム名」の両方を指定する必要がある点です。カラム名を変えない場合でも、同じ名前を2回記述します。また、データ型も改めて指定する必要があります。実
-
MySQLで列エイリアスを特定のデータ型として扱う方法(CASTとCASEの活用)
MySQLでは、符号なし整数型(UNSIGNED)の列をそのままSELECTすると、負の値を扱えないという制約があります。そこで、CASEステートメントとCAST関数を組み合わせることで、列エイリアスの結果を特定のデータ型(ここではSIGNED=符号付き整数)に強制的に変換する方法を紹介します。1. サンプルテーブルの作成まず、テスト用のテーブルを作成します。「Value」列はUNSIGNED型、「Status」列はTINYINT(1)型とします。mysql> create table DemoTable1505 -> ( &