MySQLのテーブルにフィールドを追加する方法をご存じでしょうか。SQLが使えるデータベースではテーブル作成時にフィールドの構成を指定するので、フィールドを追加するにはテーブルの構造を変えなければなりません。
なんだか難しそう、と思えるかもしれませんが、そのようなことはありません。やり方さえ理解できればフィールドを追加するためのSQLを作れます。そこで今回は次からテーブルの構成を変更してフィールドを追加する方法について解説します。
目次
そもそもフィールドとは
MySQLはオープンソースのリレーショナルデータベース管理システムで、MySQLから派生したmariadbもよく使われています。そしてMySQLはデータベースの管理にSQLを使用します。
SQLではデータベースに格納したデータをまとまった単位で処理できるのが特徴です。そして、SQLで扱う最も小さなデータの単位がフィールドです。まずはフィールドとはどんなものかについて紹介します。
MySQLのデータ構造
MySQLはオープンソースのデータベース管理ソフトで、WordPressなどのWebシステムにおけるデータ格納機能として広く利用されています。
MySQLのデータベースではデータを表計算ソフトのシートのようなテーブルに格納します。そして、表計算の表をテーブルに例えると、表計算ソフトの横列の1行分がレコードであり、レコードを構成するデータ1つ1つがフィールドです。
MySQLで扱うデータのまとまりと順に並べると次のようになります。
データベース > テーブル > レコード > フィールド
つまり、今回扱うフィールドとは、MySQLが扱うデータの最小単位を指す言葉です。
フィールドを追加するコマンドは?
MySQLはSQLを利用してデータの追加、修正、検索などを実施しますが、先ほど紹介したデータのまとまりを追加するSQLを順に紹介すると次のようになります。
データベース:CREATE DATABSE データベース名;
テーブル:CREATE TABLE テーブル名 (…. );
レコード:INSERT INTO テーブル名 VALUE( 値1, …. );
実は上記のようなフィールドのみを追加するSQLはありません。これはテーブルを作成する際に、テーブルの構造を定義しており、その定義に合わせてレコードを追加しているためで、フィールドを追加してしまうとテーブルの構造が変わってしまいます。
そのため特定のレコードのどこかにフィールドを1つ追加する、ということはできません。
フィールドの追加とはテーブルの構造を変えること
先ほど、特定のレコードにフィールを1つだけの追加はできないと説明しましたが、テーブルの構造全体を変更できればフィールドの追加が可能です。
SQLにはテーブルの構造を変えるコマンドが用意さえており、それを使うことでフィールドを追加できます。ただしこのコマンドを実行すると既に登録済の全てのレコードにも新しくフィールドが追加されます。
そのフィールドを検索に利用する場合は、後から一括でデータを登録するなどして、誤動作を防ぐ対策が必要です。
MySQLのテーブルの構造を変更する方法については、こちらの記事も参照してください。
【コピペOK】MySQLで列を追加する方法!色々なカラム追加の紹介
テーブルの構造を変えるSQL
先ほど紹介したようにMySQLにおけるテーブルとは、ちょうど表計算ソフトのシートのようなものです。横1列分に当たるレコードはSQLのINSERT文で追加したり、DELETE文で削除もできます。
ではテーブルにフィールドを追加したり削除するにはどうすればよいのでしょうか。SQLにはテーブルの構造そのものを修正するためのALTER TABLEコマンドがあるのでこれが使えます。
次からMySQLにいけるALTER TABLEコマンドの使い方について解説します。
ALTER TABLEコマンドの文法
ALTER TABLEはテーブルの構造を変更するSQLのコマンドで、基本的な文法は次のとおりです。
ALTER TABLE (テーブル名) (テーブル操作コマンド)
上記のテーブル操作コマンドは種類が多く、列の追加や削除、インデックスの作成や破棄など、テーブルに関わる多くの操作が可能です。
今回紹介しているフィールドの追加、および修正や削除なども、それぞれのテーブル操作コマンドを実行することで操作できます。
列を追加する
テーブルにフィールドを追加するとは横方向に1列を追加するということです。例えば、下記のようなテーブルがあったとします。
1 2 3 4 5 6 7 |
+----+----------+-------+ | id | name | color | +----+----------+-------+ | 1 | Case | Black | | 2 | Keyboard | Black | | 3 | Mouse | White | +----+----------+-------+ |
あらたにフィールドを追加して次のデータを格納することになりました。
1 2 3 4 5 |
+----+----------+-------+----------+ | id | name | color | type | +----+----------+-------+----------+ | 1 | Case | Black | Standard | +----+----------+-------+----------+ |
この場合、1つのレコードだけにフィールドを追加したくてもできません。テーブルに列を追加して、そこに追加するデータを格納します。
1 2 3 4 5 6 7 |
+----+----------+-------+----------+ | id | name | color | type | +----+----------+-------+----------+ | 1 | Case | Black | Standard | | 2 | Keyboard | Black | NULL | | 3 | Mouse | White | NULL | +----+----------+-------+----------+ |
このようにフィールドを追加する、ということはテーブルの構造を変更して列を1つ追加することです。
列を追加するコマンド
SQLのCREATE TABLEコマンドでフィールドを定義する場合、フィールド名とデータ型およびオプションを指定します。これらの情報は、列を追加する場合も指定しなければなりません。
SQLのALTER TABLEでフィールドを追加するには次のように指定します。
ALTER TABLE (テーブル名) ADD (追加するフィールド名) (フィールドのオプション)
例えば、既存のテーブルtable1に、整数型のflgというフィールドを追加する場合、次のコマンドを実行します。
1 |
ALTER TABLE table1 ADD type text; |
ALTER TABLE ~ ADDの使い方
先ほど紹介したようにフィールドを追加するにはテーブルに列を追加しなければなりません。それはテーブルの構造を修正することです。そのためフィールドの追加にはSQLのALTER TABLE ~ ADDコマンドを使用します。
次からALTER TABLE ~ ADDの使い方について紹介します。
基本はテーブルの右端に追加する
特に位置を指定せずにMySQLのテーブルに列を追加した場合、テーブルの右端に1列分が追加されます。
SQLを使えば実際に格納される順番はバラバラでもSELECT文で表示する項目の順序を指定できるので、右端に格納されてもそれほど問題はありません。しかし、気になる場合は次から紹介する追加位置を指定するSQLを使用してください。
特定の位置にカラムを追加する
カラムを特定の位置に追加する場合、ALTER TABLE ~ ADDコマンドに続けて場所を指定するオプションを追加します。
特定のカラムの後に追加するALTER TABLE文の文法
ALTER TABLE (対象のテーブル名) ADD (追加するカラム名) (カラムの型) AFTER (追加する前のカラム名);
使用例
1 |
ALTER TABLE table1 ADD type text AFTER color; |
まとめ
これまで紹介したようにMySQLでフィールドを追加したくても、特定のレコードだけに追加はできません。フィールドを追加するならテーブル全体に列を1つ追加してください。
なお列を追加するSQLはALTER TABLE ~ ADDです。追加する場所の指定も可能なので、必要に応じてフィールドを追加するSQLを組んで実行してください。