SQLでテーブルを作成する際には、必ず項目(カラム)の設定が必要dす。
この記事では、項目の作成方法から追加方法、オプションの設定方法などをていねいに解説します。
ぜひこの記事を参考に、項目の追加方法を知ってください!
目次
項目(カラム)を作成する方法
まず、項目を作成するにはテーブル作成時に次のように記述します。
CREATE TABLE テーブル名(カラム名1 カラム定義, カラム名2 カラム定義, カラム名3 カラム定義, …);
項目は、「項目の名前(カラム名)」と「その定義(カラム定義)」を記述することで、追加作成です。
基本的に、このテーブル作成・項目作成はどのDBMSでも同じようになります。
では、サンプルで実際に項目を作成してみましょう。
ここでは、下記のように ユーザーID、名前、住所 の3つの項目があるテーブルを作成しました。
mysql> CREATE TABLE sample_table(user_id int, name varchar(20), address varchar(20)); Query OK, 0 rows affected (0.01 sec)
ちゃんとテーブルと項目が作成されたか、確認してみましょう。
mysql> SHOW COLUMNS FROM sample_table; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | user_id | int | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | address | varchar(20) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
テーブルとその項目が作成されているのがわかります。
これで項目作成は完了です。
では次の章で項目追加を行う方法について見てみましょう。
項目追加を途中からする時は「ALTER TABLE ADD」を使う
項目を作り忘れてしまったのですが、テーブル作成後に追加できますか?
はい、可能です!実際に項目を後から追加してみましょう。
テーブル作成後に途中から項目を追加したい場合もあるでしょう。
項目を途中から追加するには、 ALTER TABLE ADD文 を使います。
記述方法は次の通りです。
ALTER TABLE テーブル名 ADD カラム名 カラム定義 [FIRST | AFTER カラム名];
ADD の後に、追加したい項目名とその定義を記述します。
テーブルの一番最後に項目を追加したい場合は「カラム定義」まで記述すればOKです。
もし、何かの項目の前もしくは後に追加したい場合は、 FIRSTもしくは AFTER を記述し、該当項目名を記述します。
では実際に、先ほどのテーブルに項目追加してみましょう。
MySQLで項目追加
まずは、テーブルの一番最後に項目を追加してみます。
mysql> ALTER TABLE sample_table ADD tel varchar(20); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
テーブル定義を確認してみると、次のようにテーブルの最後に追加した項目が表示されているはずです。
mysql> SHOW COLUMNS FROM sample_table; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | user_id | int | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | address | varchar(20) | YES | | NULL | | | tel | varchar(20) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
では、次にテーブルの任意の場所に項目を追加してみましょう。
mysql> ALTER TABLE sample_table ADD age int AFTER name; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
上記のSQLクエリを実行することで、name項目 の後ろに age項目 が追加されているはずです。
実際にテーブル定義を確認してみましょう。
mysql> SHOW COLUMNS FROM sample_table; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | user_id | int | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | age | int | YES | | NULL | | | address | varchar(20) | YES | | NULL | | | tel | varchar(20) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 5 rows in set (0.01 sec)
このように、指定した箇所に項目追加ができました!
PostgreSQLで項目追加
PostgreSQLで項目追加を行うには、どうすれば良いですか?
MySQL同様に、ALTER TABLE ADD文を使えばOKです!
PostgreSQLで項目追加を行う際も、ALTER TABLE ADD文を使えば問題ありません。
ALTER TABLE テーブル名 ADD カラム名 カラム定義;
ただし、MySQLとは異なり AFTER / FIRST は使えません。
そのため、項目追加をする際には必ずテーブルの最後に追加されます。
どうしても項目を任意の位置に追加したい場合は、項目を追加した新規テーブルを作り、そこにデータを挿入し直す、といった方法をとることになるでしょう。
Oracleで項目追加
Oracleの場合も、MySQLと同じですか?
MySQLよりはPostgreSQLと同様で、AFTER / FIRSTが使えません。
Oracleで項目追加を行う際も、下記の ALTER TABLE ADD文 を使えば問題ありません。
ALTER TABLE テーブル名 ADD カラム名 カラム定義;
また、任意の位置に追加はできません。
項目追加を複数するには?
項目追加する数を複数にしたい場合は、ADD以降の記述をカンマ区切りでつなぐことで実行可能です。
記述方法は次のようになります。
ALTER TABLE テーブル名 ADD カラム名1 カラム定義, ADD カラム名2 カラム定義, …;
実際に先ほどのテーブルに項目追加を複数行うと、次のようになります。
mysql> ALTER TABLE sample_table ADD mail varchar(30), ADD sex varchar(10); Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0
結果の表示は省きますが、ちゃんと項目が2つ追加されているはずです。
項目追加する時に初期値を設定する方法
項目追加時に項目の初期値を設定したい場合は、カラム定義の後ろに「DEFAULT」を追加します。
記述方法は次の通りです。
ALTER TABLE テーブル名 ADD カラム名 カラム定義 DEFAULT 初期値;
こちらも先ほどのテーブルを使って確認してみます。
ALTER TABLE sample_table ADD score int DEFAULT 0;
上記SQLを実行後、テーブル定義を確認してみると次のように初期値の設定ができているはずです!
mysql> SHOW COLUMNS FROM sample_table; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | user_id | int | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | age | int | YES | | NULL | | | address | varchar(20) | YES | | NULL | | | tel | varchar(20) | YES | | NULL | | | mail | varchar(30) | YES | | NULL | | | sex | varchar(10) | YES | | NULL | | | score | int | YES | | 0 | | +---------+-------------+------+-----+---------+-------+ 8 rows in set (0.01 sec)
項目追加する時に「NOT NULL」を設定する方法
項目追加時に NOT NULL を設定したい場合は、カラム定義の後ろに NOT NULL を記述します。
ALTER TABLE テーブル名 ADD カラム名 カラム定義 NOT NULL;
では、実際に確認してみましょう。
ALTER TABLE sample_table ADD salary int NOT NULL; mysql> SHOW COLUMNS FROM sample_table; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | user_id | int | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | age | int | YES | | NULL | | | address | varchar(20) | YES | | NULL | | | tel | varchar(20) | YES | | NULL | | | mail | varchar(30) | YES | | NULL | | | sex | varchar(10) | YES | | NULL | | | score | int | YES | | 0 | | | salary | int | NO | | NULL | | +---------+-------------+------+-----+---------+-------+ 9 rows in set (0.01 sec)
このように、salaryの項目だけ Null の部分が No になりました。
追加した項目名を変更するには「ALTER TABLE RENAME」
追加した項目名を変更したい場合は「ALTER TABLE RENAME」文を使います。
記述方法は次の通りです。
ALTER TABLE テーブル名 RENAME COLUMN 変更前の項目名 TO 変更後の項目名;
では、sample_table の score項目 を test という項目名に変更してみます。
ALTER TABLE sample_table RENAME COLUMN score TO test;
実行結果は省略しますが、期待した通りの結果になっているはずです。
追加した項目の定義を変更するには「ALTER TABLE CHANGE/ALTER TABLE MODIFY」
追加した項目の定義を変更する場合は「ALTER TABLE CHANGE」文もしくは「ALTER TABLE MODIFY」文を使います。
ALTER TABLE CHANGE文は、項目名とその定義の2つを変更できます。
一方、ALTER TABLE MODIFY文は、項目の定義だけを変更します。
それぞれ次のように記述します。
ALTER TABLE テーブル名 CHANGE 変更前の項目名 変更後の項目名 項目の定義; ALTER TABLE テーブル名 MODIFY 項目名 項目の定義;
サンプルでの実行は省略しますが、それぞれ利用用途に応じて使い分けましょう!
追加した項目を削除するには「ALTER TABLE DROP」
追加した項目を削除する場合は「ALTER TABLE DROP」文を使います。
記述方法は次の通りでシンプルです。
ALTER TABLE テーブル名 DROP 項目名;
DROP の後ろに項目名を記述すれば簡単に削除できます。
試しに sample_table の salary項目 を削除してみます。
ALTER TABLE sample_table DROP salary; mysql> SHOW COLUMNS FROM sample_table; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | user_id | int | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | age | int | YES | | NULL | | | address | varchar(20) | YES | | NULL | | | tel | varchar(20) | YES | | NULL | | | mail | varchar(30) | YES | | NULL | | | sex | varchar(10) | YES | | NULL | | | test | int | YES | | 0 | | +---------+-------------+------+-----+---------+-------+ 8 rows in set (0.01 sec)
上記のように、項目削除ができました!
まとめ
SQLの項目追加について解説しました。
項目の追加や定義の変更など、比較的カンタンに行えることがわかったかと思います。
もし実際にやってみてわからなくなってしまった時は、ぜひこの記事を参考にしてみてください!