WEBOPIXEL

MySQL入門その2 – データ型について

Posted: 2020.10.18 / Category: データベース 

MySQL入門講座第二回目です。
今回はデータ型とオプションについて掘り下げていきます。

Sponsored Link

この記事は下記の続きです。よかったらこちらもどうぞ。

さらりとMySQL入門

前回作成したテーブル

前回は下記のテーブルを作成しました。

テーブル名: members

論理名 物理名 サイズ
社員コード code CHAR 10
名前 name CHAR 20
年齢 age INT 3

新たにカラムを追加する

新たに性別を入れる「gender」を追加したいと思います。
性別は男女の2パターンなので型は「BOOLEAN」で設定してみましょう。

論理名 物理名 サイズ
性別 gender BOOLEAN

カラムを追加する書式は次のようになります。

ALTER TABLE テーブル名 ADD カラム名 型;

作成する情報を当てはめて実行しましょう。

ALTER TABLE members ADD gender BOOLEAN;

追加できたかテーブル情報を確認してみます。

DESC members;
Field Type Null
gender tinyint(1) YES

BOOLEANで作成したはずですが、tinyintになってますね。
MySQLではBOOLEANは数値(tinyint)の0,1で扱われます。

カラムの変更

現状のテーブルで一つ問題がありました。
年齢を入れるカラムを作成したのですが、これだと年に一度年齢を更新しなくてはいけません。
更新作業を減らす為、生年月日を入れるように変更してみましょう。
生年月日は年月日を入れるので、DATE型を使用します。
もし時間を入れたい場合といった場合はDATETIMEもあります。

論理名 物理名 サイズ
生年月日 birthday DATE

カラムの情報を変更する書式は次のようになります。

ALTER TABLE テーブル名 CHANGE 変更前のカラム名 変更後のカラム名 型;

ですが今回は入っているデータが数値から日付になるので、型を変更すると問題になる可能性があります。
なので今回はageカラムを一度削除してから新しくbirthdayカラムを追加してみます。

カラムを削除する書式は次のようになります。

ALTER TABLE テーブル名 DROP カラム名;

上記に当てはめて次のクエリを実行しましょう。

ALTER TABLE members DROP age;

先ほどと同じようにADDを使用してbirthdayカラムを追加しますが、今度はageカラムがあった位置に追加してみましょう。
ageはnameの後になりましたね。その場合は次のようになります。

ALTER TABLE members ADD birthday DATE AFTER name;

主(プライマリ)キーの設定

テーブルにはプライマリキーと言う、レコードを識別するための他のレコードと重複しないカラムを設定すると便利です。
今回の場合は社員コードに設定してもいいのですが、通常使用するカラムのほかに、IDというカラムを作成して連番で入れていくことが多いです。
プライマリキー・連番の設定はオプションを追加することで設定が可能です。
IDは次の条件で作成します。

プライマリキー PRIMARY KEY
連番 AUTO_INCREMENT
符号なし(正の数のみ) UNSIGNED

カラムの設定は次のようになります。

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY

AUTO_INCREMENTを指定することでデータベースで自動的に採番してくれます。

MySQLにはこの他にも様々なオプションを設定することができます。
代表的なものをいくつかご紹介します。

入力必須(NOT NULL)

今の状態はどのカラムも未入力の状態でも入力できます。
場合によっては必ず入力してほしいカラムがあります。
その場合NOT NULLを指定することで、未入力の場合はエラーで登録できないようにすることができます。

例えば名前を必ず入力させたい場合は次のように指定します。

name CHAR(20) NOT NULL

重複不可(UNIQUE)

先ほど設定したプライマリキーは重複不可ですが、プライマリキーは一つのテーブルで一つだけ設定することができます。
しかし他のカラムでも重複不可に設定したい場合があります。
その場合はUNIQUEを指定します。

社員コードを重複不可に設定する場合は次のように指定します。

code CHAR(10) UNIQUE

初期値の設定(DEFAULT)

DEFAULTを設定すると、何も入力がなかった場合決められた値を登録するように設定することができます。

社員コードに何も入力がなかった場合「A000」を登録するには次のように指定します。

code CHAR(10) DEFAULT 'A000'

コメント(COMMENT)

動作には影響がありませんが、COMMENTを設定するとカラムにコメントを残すこともできます。
論理名など入れておくといいでしょう。

name CHAR(20) NOT NULL COMMENT '名前'

テーブルを改めて作成

それでは上記を踏まえて改めてテーブルを作成してみましょう。

DROP TABLE IF EXISTS members;
CREATE TABLE members (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  code CHAR(10) UNIQUE COMMENT '社員コード',
  name CHAR(20) NOT NULL COMMENT '名前',
  birthday DATE COMMENT '生年月日',
  gender BOOLEAN COMMENT '性別'
);

codeに同じ値を入力したり、名前を未入力で登録してエラーが表示され登録できないことを確認してみてください。