MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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 のように指定するのが良いでしょう。
  1. MySQLでVARCHAR型のカラムをNULL許容に変更する方法

    MySQLでは、テーブルのカラム定義を後から変更できます。既存のVARCHAR型カラムをNULL値を許容する設定に変更したい場合は、ALTER TABLE文とCHANGE句を組み合わせて使用します。基本構文カラムをNULL許容に変更するには、以下の構文を使用します。ALTER TABLE テーブル名 CHANGE 変更前カラム名 変更後カラム名 データ型 NULL DEFAULT NULL;ポイントは、CHANGE句の後に「現在のカラム名」と「新しいカラム名」の両方を指定する必要がある点です。カラム名を変えない場合でも、同じ名前を2回記述します。また、データ型も改めて指定する必要があります。実

  2. MySQLで列エイリアスを特定のデータ型として扱う方法(CASTとCASEの活用)

    MySQLでは、符号なし整数型(UNSIGNED)の列をそのままSELECTすると、負の値を扱えないという制約があります。そこで、CASEステートメントとCAST関数を組み合わせることで、列エイリアスの結果を特定のデータ型(ここではSIGNED=符号付き整数)に強制的に変換する方法を紹介します。1. サンプルテーブルの作成まず、テスト用のテーブルを作成します。「Value」列はUNSIGNED型、「Status」列はTINYINT(1)型とします。mysql> create table DemoTable1505    -> ( &