MySQLでフィールドに設定できる属性たち
投稿日:
このページは、MySQLでフィールドに設定できる各種属性のうち、主に私が使用したことがあるものの一部をひたすらメモっていくものです。もくじ
- フィールドに属性を設定する例
- (整数型データに適用)UNSIGNED:整数を符号なしにして最大値を2倍にする
- PRIMARY KEY:主キー制約を設定して重複・空白を排除する
- (整数型データに適用)AUTO_INCREMENT:行が追加されるごとに自動で連番を振っていく
- UNIQUE:一意性を保証する(重複を排除)
- NOT NULL:意味がある値を必ず入れる(空白を排除)
フィールドに属性を設定する例
テーブルを作成する時に任意のフィールドに属性を設定する場合は、以下の例のようにフィールド名とフィールドのデータ型を記述した後に属性を書き連ねていきます。複数の属性を設定する時は半角スペースで区切ります。フィールド同士はカンマ(,)で区切ります。 [mysql] CREATE TABLE database_name.hoge(id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, hoge TEXT CHARACTER SET utf8, lastdate BIGINT); [/mysql]
(整数型データに適用)UNSIGNED:整数を符号なしにして最大値を2倍にする
MySQLにはデータ型の1つに「整数型」がありますが、格納できる数値の上限が異なる5つのデータ型が用意されています(このあたりの話は当ブログの MySQLでの整数・小数の扱いメモ にもあります)。整数値を格納するデータ型は以下の通りです。
- TINYINT…1バイト(符号無しなら0~255,符号付きなら-128~127)
- SMALLINT…2バイト(符号無しなら0~65535,符号付きなら-32768~32767)
- MEDIUMINT…3バイト(符号無しなら0~16777215,符号付きなら-8388608~8388607)
- INT…4バイト(符号無しなら0~4294967295,符号付きなら-2147483648~2147483647)
- BIGINT…8バイト(符号無しなら0~18446744073709551615,符号付きなら-9223372036854775808~9223372036854775807)
通常これらのデータ型では符号付きの数値を扱いますが、「UNSIGNED」属性を付加すると、0と正の整数のみを扱うようになります。すると通常では負の数をカウントするために使用される格納域がより大きな正の整数をカウントするために使用できるようになり、同じバイト数でより大きな正の整数値を記録できるようになります。将来にわたって0と正の整数しか記録しないことが予め分かっている場合は、UNSIGNED属性を付けて記録できる整数の上限値を引き上げると良いかもしれません。
PRIMARY KEY:主キー制約を設定して重複・空白を排除する
この属性は、おもに主キー(データを特定するために使用されるフィールド…ユーザーIDなど)に付加される属性です。1つのテーブルにつき1つのフィールドのみに付加することができます。PRIMARY KEY属性を付加すると、そのフィールドには自動的に「UNIQUE」属性と「NOT NULL」属性(どちらも後述)が付加され、値の重複や空白の値(NULL値)の入力は禁止されます。ちなみに、複合キーを設定したい場合は以下のようなSQL文でテーブルを作成することになります。 [mysql] CREATE TABLE database_name.hoge(school_class TINYINT UNSIGNED, attendance_number TINYINT UNSIGNED, name TEXT CHARACTER SET utf8, lastdate BIGINT, PRIMARY KEY(school_class,attendance_number)); [/mysql]
(整数型データに適用)AUTO_INCREMENT:行が追加されるごとに自動で連番を振っていく
ユーザーIDなどのように、新しいユーザーが追加されるときには自動でIDを連番にして欲しい時があるかと思います。そのような場合に便利なのがAUTO_INCREMENT属性です。この属性を設定すると、テーブルに新しい行を追加する際、設定したフィールドに値が入力されていなければ自動的に連番になるような値(既存のデータとの重複が発生しない値)をセットしてくれます。
参考リンク
- MySQL :: MySQL 5.6 リファレンスマニュアル :: 3.6.9 AUTO_INCREMENT の使用
- MySQLのAUTO_INCREMENTについて色々と調べてみた。 – Qiita
UNIQUE:一意性を保証する(重複を排除)
UNIQUE属性がセットされたフィールドには、テーブル内の別のレコードでも使用されている値の入力が禁止されます。主キーとなるフィールドでは他のレコードと同じ値が入力されるとデータの識別ができなくなるので、PRIMARY KEY属性が付加されたフィールドには自動的にUNIQUE属性も付加されます。
NOT NULL:意味がある値を必ず入れる(空白を排除)
NOT NULL属性がセットされたフィールドでは、NULL値(値が入力されていない)が許容されません。主キーとなるフィールドでは値が空白だとよろしくないので、PRIMARY KEY属性が付加されたフィールドには自動的にNOT NULL属性も付加されます。