🧚 お知らせ!Beekeeper Studio は高速でモダンなオープンソースのデータベース GUI です ダウンロード
2024年5月28日 著者: Matthew Rathbone

MySQL でカラムの型を変更するのは、データベースを扱う際によくある作業です。新しいデータ要件に対応したり、パフォーマンスを最適化したりするために、カラムの型を変更する必要が出てくることがあります。このチュートリアルでは、ALTER TABLE 文を使ってカラムの型を変更する方法を、実践的な例とともに解説します。

ALTER TABLE 文を理解する

ALTER TABLE 文は、既存のテーブルの構造を変更するために使用します。カラムやインデックスの追加、削除、変更が可能です。カラムの型を変更する場合の基本構文は次のとおりです。

ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;

構文を詳しく見ていきましょう。

  • table_name: 変更したいカラムを含むテーブルの名前です。
  • column_name: 変更したいカラムの名前です。
  • new_data_type: カラムに割り当てる新しいデータ型です。

例: MySQL でカラムの型を変更する

次の構造を持つ users というテーブルを考えてみましょう。

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50),
    age INT
);

初期の構造は次のコマンドで確認できます。

DESCRIBE users;

期待される出力:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| username | varchar(50) | YES  |     | NULL    |                |
| age      | int         | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

age カラムの型を変更する

年齢の範囲は小さいため、容量を節約する目的で age カラムを INT から TINYINT に変更したいとします。

ALTER TABLE users MODIFY COLUMN age TINYINT;

上記のコマンドを実行すると、age カラムが TINYINT に変更されます。変更を確認しましょう。

DESCRIBE users;

期待される出力:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| username | varchar(50) | YES  |     | NULL    |                |
| age      | tinyint     | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

TINYINT は INT に比べて格納できる数値の範囲が狭い点に注意してください。ご想像のとおり、これによりテーブル内のデータを変換する際に問題が生じる可能性があります。この影響については、後述の Conversion Issues セクションで説明します。

username カラムの型を変更する

次に、より長いユーザー名を使えるように、username カラムを VARCHAR(50) から VARCHAR(100) に変更してみましょう。

ALTER TABLE users MODIFY COLUMN username VARCHAR(100);

変更を確認しましょう。

DESCRIBE users;

期待される出力:

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int          | NO   | PRI | NULL    | auto_increment |
| username | varchar(100) | YES  |     | NULL    |                |
| age      | tinyint      | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

データ変換の問題への対処

カラムの型を変更する際、既存のデータが新しい型と互換性がないと問題が発生することがあります。MySQL は既存のデータの変換を試みますが、変換できない値があると、NULL 値になったり、切り捨てられたりする場合があります。

例: データの切り捨て - INT から TINYINT

今回の INT から TINYINT への変更例では、TINYINT が INT と同じ範囲の値をサポートしていないため、データが切り捨てられる可能性があります。

  • INT は -2,147,483,648 から 2,147,483,647(符号付き)、または 0 から 4,294,967,295(符号なし)の値を格納できます。
  • TINYINT は -128 から 127(符号付き)、または 0 から 255(符号なし)の値を格納できます。

変換時には次のことが起こります。

a. カラム内の INT 値が TINYINT で格納できる範囲内であれば、問題なく変換されます。
b. INT 値が TINYINT の範囲を超える場合は、TINYINT の範囲に収まるように切り捨てられます。たとえば INT 値が 300 の場合、符号付き TINYINT では 127、符号なし TINYINT では 255 に切り捨てられます。

データが新しいデータ型の上限を超える場合、SQL モードの設定によっては、変換中に MySQL が警告やエラーを出すことがあります。

例: 互換性のない型への変更

次のケースを考えてみましょう。

ALTER TABLE users MODIFY COLUMN age CHAR(3);

これにより age カラムが CHAR(3) に変更されます。ただし、年齢が 999 を超える場合は、先頭の 3 文字に切り捨てられます。情報の損失を防ぐため、新しい型が既存のデータを扱えることを必ず確認してください。

まとめ

MySQL でカラムの型を変更するには、ALTER TABLE 文と MODIFY COLUMN 句を使用します。変更内容は必ず確認し、データ変換の問題に注意してください。このチュートリアルでは、実際のプロジェクトで自信を持って活用できるよう、実践的な例を使ってこの作業の手順を紹介しました。

ALTER TABLE 文を理解して活用することで、MySQL のデータベース構造を効果的に管理・最適化できます。

Beekeeper Studioは無料のオープンソースのデータベースGUIです

これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。

BeekeeperのLinux版は100%フル機能。手抜きも機能の妥協も一切ありません。

Beekeeper Studio 利用者の声

★★★★★
「Beekeeper Studio は以前の MySQL のワークフローを完全に置き換えてくれました。高速で直感的で、データベース作業がまた楽しくなりました。」
— Alex K.、データベース開発者
★★★★★
「多くのデータベース GUI を試してきましたが、Beekeeper は機能とシンプルさのバランスが絶妙です。とにかくちゃんと動きます。」
— Sarah M.、フルスタックエンジニア

MySQL のワークフローを改善しませんか?

download 無料でダウンロード