MySQLのテーブル作成記事では、テーブル作成の基本的なSQLを学びました。 カラムとカラムのデータ型を指定すれば基本的なテーブル作成は簡単でしたが、今回はカラムごとに様々なルールを付与するフィールドオプションをいくつか紹介します。 フィールドオプションを利用することでカラムに入れるデータを制限し、プログラムからの呼び出し時にエラーが出にくくなります。

MySQLのフィールドオプション

3年以上前に更新されました。情報が古い可能性があります。
更新日 : 2019年06月26日

MySQLのテーブル作成記事では、テーブル作成の基本的なSQLを学びました。

カラムとカラムのデータ型を指定すれば基本的なテーブル作成は簡単でしたが、今回はカラムごとに様々なルールを付与するフィールドオプションをいくつか紹介します。

フィールドオプションを利用することでカラムに入れるデータを制限し、プログラムからの呼び出し時にエラーが出にくくなります。

フィールドオプションを追加するときの書式

テーブル作成時にフィールドオプションを設定する場合の書式が以下です。

CREATE TABLE テーブル名
(
	カラム名1 データ型 フィールドオプション1 フィールドオプション2 ...,
	カラム名2 データ型 フィールドオプション1 ...
);

基本的にはテーブル作成のSQLとあまり変わりません。カラムを指定する際にカラム名 データ型とスペースを入れて指定していましたが、フィールドオプションも同様にカラム名 データ型 フィールドオプションのように指定します。

フィールドオプションはスペースで区切って複数指定することが可能です。

not nullオプション

Nullとはデータがない状態を表します。つまり、not nullオプションを指定することで、そのカラムのデータがない状態にすることを禁止します。

CREATE TABLE users (id int not null);

このようにするとusersテーブルにあるidカラムでは整数型を指定し、なおかつNULLであることを禁止します。not nullのように記載します。

defaultオプション

次に、defaultオプションです。これはレコードを追加する際にそのカラムに値が指定されなかった場合にデフォルトで挿入されるデータです。

CREATE TABLE users (
	id int not null,
	gender varchar(5) default 'man'
);

このように指定すると、usersテーブルにあるgenderカラムでは文字列型(5文字まで)を指定し、なおかつデフォルトでmanを挿入します。

このテーブルにレコードを追加する際には

INSERT INTO users (id) values (1);

このように追加するとgenderカラムを指定していないため、genderカラムにはデフォルト値であるmanが追加されます。

INSERT INTO users (id, gender) values (1, 'woman');

逆に上記のようにgenderカラムを指定して追加した場合には指定した値であるwomanが登録されます。

auto_incrementオプション

auto_incrementオプションは整数型と浮動小数点型にのみ適用できます。auto_incrementは日本語にすると「自動増加」です。これは、auto_incrementオプションを設定したカラムでは、レコード追加時に自動で採番してくれます。

テーブル作成後、1つ目のレコード追加時には「1」を自動で採番し、2つ目のレコード追加時には「2」を自動で採番してデータを追加します。

CREATE TABLE users (
	id int not null auto_increment primary key,
	gender varchar(5) default 'man'
);

このようにテーブルを作成すると、idカラムでは整数型を指定し、Nullを禁止し、なおかつ自動採番してくれます。

INSERT INTO users (gender) values ('woman');

このようにインサート文を実行すると、最初のレコード追加時にはidカラムに自動で「1」が挿入されます。追加するたびに前回採番された番号から+1された数字が自動で採番されてレコードとして登録されます。

このauto_increment主キーで利用されることが多くあります。

uniqueオプション

uniqueオプションはその名の通り、一意なデータしかいれることができません。テーブルでuniqueオプションが設定されたカラムではデータの重複ができません

例えばユーザー情報のテーブルにはメールアドレスを登録するカラムが必要な場合が多くあります。その際にメールアドレスは1人のユーザーに対して固有のデータのはずです。
固有のデータのはずなのにメールアドレスが重複してレコードが入ることは避けたいです。

そのようなときにuniqueオプションを設定しておくことで、重複データが入らないようにしてくれます。

CREATE TABLE users (
	id int not null auto_increment primary key,
	gender varchar(5) default 'man',
	email varchar(255) unique
);

このようにテーブルを作成すると、emailカラムでは文字列型(255文字まで)を指定し、なおかつ重複を禁止します。

primary keyオプション

次にprimary keyオプションです。日本語にすると「主キー」です。つまりこのオプションを指定したカラムが主キーになります。

primary keyはテーブルにつき1つだけ設定できます。

また、自動的にnot null制約かつunique制約になります。primary keyを設定する場合には以下のようにテーブル作成SQLを発行するのが一般的です。

CREATE TABLE users (
	id int not null auto_increment primary key,
	gender varchar(5) default 'man',
	email varchar(255) unique
);

このようにid int not null auto_increment primary key設定することでidカラムでは整数型でNullを禁止し、自動採番設定を入れた上で主キーとして登録します。

primary keyは1つのテーブルにつき、ほぼ必ず設定します。そうすることで外部キーとの連携が取りやすくなります。

commentオプション

最後にcommentオプションです。これはカラムにコメントを残すだけの機能で、テーブル情報を確認する際に利用されます。設定は任意なので、カラム名がわかりやすい場合などはなくても困りません。

CREATE TABLE users (
	id int not null auto_increment primary key comment '主キー',
	username varchar(30) unique comment 'ユーザー名'
);

comment '主キー'のようにオプションを指定するとそれぞれのカラムにコメントが付与されます。

まとめ

ここまで学んだフィールドオプションを利用してユーザー情報を格納するテーブルを簡単に作ってみましょう。

CREATE TABLE users (
	id int not null auto_increment primary key comment '主キー',
	username varchar(30) unique comment 'ユーザー名',
	email varchar(255) not null unique comment 'メールアドレス',
	password varchar(255) not null comment 'パスワード',
	gender varchar(5) not null default 'man' comment '性別'
);

これで一般的なユーザー情報を格納するテーブルができました。他に必要そうなカラムがあれば(論理削除カラムや作成日時カラム等)適宜追加してテーブルを作成してみましょう。