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

MySQLで列のサイズを後から変更・拡張する方法(ALTER TABLEの使い方)

MySQLでは、一度作成したテーブルの列(カラム)サイズも、後から自由に変更・拡張することができます。たとえば「varchar(5)」で定義した列に、それより長い文字列を挿入しようとするとエラーになってしまいますが、ALTER TABLEコマンドとCHANGE句を使えば、列のサイズを簡単に拡張できます。

列サイズを変更する基本構文

列のサイズを更新するには、以下の構文を使用します。

ALTER TABLE テーブル名 CHANGE 列名 列名 変更後のデータ型;

CHANGE句では「新しい列名」と「新しいデータ型」を指定します。列名を変えずにサイズだけ拡張したい場合は、同じ列名を2回続けて記述すればOKです。

サンプルテーブルの作成

それでは、実際に動作を確認してみましょう。まず、サイズ5の「Name」列を持つテーブルを作成します。

mysql> create table DataTruncated
    -> (
    -> id int,
    -> Name varchar(5)
    -> );
Query OK, 0 rows affected (0.64 sec)

上記のように「Name」列のサイズは5です。この状態で5文字を超える文字列を挿入すると、MySQLは次のようなエラーを返します。

mysql> insert into DataTruncated values(101,'JohnSmith');
ERROR 1406 (22001): Data too long for column 'Name' at row 1

「Data too long for column(データが長すぎます)」というエラーが発生し、挿入に失敗しました。これは列サイズが小さすぎることが原因です。

列サイズを5から200へ拡張する

そこで、「Name」列のサイズを変更します。実行するクエリは以下の通りです。

mysql> alter table DataTruncated change Name Name varchar(200);
Query OK, 0 rows affected (2.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

これで列サイズが5から200に拡張されました。なお、テーブルに大量のデータが登録されている場合、ALTER TABLEの実行には時間がかかることがありますので注意してください。

再度レコードを挿入して確認

先ほど失敗したのと同じレコードを、もう一度挿入してみましょう。今度はエラーが発生せず、正常に登録できます。

mysql> insert into DataTruncated values(101,'JohnSmith');
Query OK, 1 row affected (0.11 sec)

最後に、SELECT文でテーブルの中身を確認してみます。

mysql> select *from DataTruncated;

実行結果は以下の通りです。

+------+-----------+
| id   | Name      |
+------+-----------+
| 101  | JohnSmith |
+------+-----------+
1 row in set (0.00 sec)

このように、8文字の「JohnSmith」が問題なく格納されていることがわかります。ALTER TABLE ~ CHANGE構文を使えば、既存テーブルの列サイズを失うことなく拡張でき、データの切り詰めエラーも回避できます。運用中に保存できる文字数を増やしたい場合などに、ぜひ活用してください。

  1. MySQLで重複しない日付(個別の値)を表示する方法

    MySQLでは、datetime型のカラムから「日付のみ」を基準に重複を排除してデータを取得したいケースがよくあります。例えば、同じ日に複数の注文や出荷記録がある場合、日付単位で1件だけ取り出したいときなどです。本記事では、GROUP BYとDATE()関数を組み合わせて、重複しない日付ごとのレコードを表示する方法を解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。ここでは、出荷日時(ShippingDate)と顧客名(CustomerName)を持つテーブルを定義します。 mysql> create table DemoTable1996 (

  2. MySQLでテーブルを更新し、新しい列に名前のイニシャルを表示する方法

    MySQLでは、LEFT()関数とSUBSTRING_INDEX()関数を組み合わせることで、氏名からイニシャル(頭文字)だけを取り出すことができます。この記事では、実際にテーブルを作成し、既存のデータからイニシャルを生成して新しい列に格納する手順を解説します。 1. テーブルの作成 まず、氏名を保存する「full_name」列と、イニシャルを格納する「short_name」列を持つテーブルを作成しましょう。 mysql> create table demo13 -> ( -> full_name varchar(100), -> short_name varchar