MySQLのINT型について
MySQLでデータベースを扱う際に、数値を格納するためのデータ型はとても重要です。その中でも「INT型」は非常によく使われます。今回は、MySQLのINT型について解説します。INT型はどのような特徴があり、どう活用すべきかについて詳しく見ていきましょう。
INT型とは
INT型は、整数(小数点のない数)を格納するためのデータ型です。「Integer」の略で、その名の通り、正の整数や負の整数を効率的に格納することができます。データベースでは数値を扱う場面が多く、例えば年齢や数量、IDなどを記録するのにINT型は最適です。
INT型の特徴
INT型の主な特徴は以下の通りです:
- 範囲が広い:INT型は比較的広い範囲の数値を格納できます。
- メモリ効率が良い:他のデータ型と比べて格納サイズが小さいため、メモリやストレージの利用が効率的です。
- 高速:数値を直接扱えるため、検索や並べ替えが高速です。
INT型の種類
MySQLにはINT型にいくつかのサイズがあります。それぞれ異なる範囲と用途に適しているので、必要に応じて使い分けると便利です。
データ型 | 格納サイズ(バイト) | 範囲(符号あり) | 範囲(符号なし) |
---|---|---|---|
TINYINT | 1 | -128 〜 127 | 0 〜 255 |
SMALLINT | 2 | -32,768 〜 32,767 | 0 〜 65,535 |
MEDIUMINT | 3 | -8,388,608 〜 8,388,607 | 0 〜 16,777,215 |
INTまたはINTEGER | 4 | -2,147,483,648 〜 2,147,483,647 | 0 〜 4,294,967,295 |
BIGINT | 8 | -9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807 | 0 〜 18,446,744,073,709,551,615 |
それぞれのINT型の用途
- TINYINT:数値が小さい場合に適しています。例えば「1〜100」のような小さな範囲の数値を扱うとき。
- SMALLINT:少し大きな整数(例えば数千まで)を格納するのに向いています。従業員のIDや学籍番号など。
- MEDIUMINT:TINYINTやSMALLINTの範囲では不足するけれども、INTほど大きな範囲は必要ない場合に使用。
- INT:一般的な用途でよく使われます。例えば、会員IDや商品の在庫数など。
- BIGINT:非常に大きな数値を格納する必要がある場合に利用します。金融データやアクセスログのIDなど、膨大なデータに適しています。
符号付きと符号なし
INT型には「符号付き(SIGNED)」と「符号なし(UNSIGNED)」のオプションがあります。符号付きは正の数と負の数の両方を格納できますが、符号なしは正の数のみ格納可能です。
例えば、INT型における符号付きと符号なしの範囲は以下の通りです:
- 符号付き(SIGNED):-2,147,483,648 〜 2,147,483,647
- 符号なし(UNSIGNED):0 〜 4,294,967,295
符号なしを使うメリット
符号なしにすると、負の値を格納する必要がない場合に、その分の範囲を正の数のために使えるようになります。例えば、IDや年齢のように、絶対に負の数にならないデータを扱う際は、符号なしを使うことで範囲を広げることができ、メモリの節約にもつながります。
INT型を使う際の注意点
INT型を使用する際には、いくつかの点に注意が必要です。
範囲外の値の取り扱い
INT型にはそれぞれ格納できる範囲が決まっていますが、もしその範囲外の値を挿入しようとするとどうなるのでしょうか?範囲外の値が挿入されようとすると、MySQLはエラーを出すか、最も近い有効な範囲内の値に丸め込まれます。
NULL値の扱い
INT型の列にNULLを許可するかどうかも設定できます。NULLは「値が未定義」という意味で、数値がまだ入力されていないことを示すために使われます。NULL値を許可するときは、必要に応じてデータの検証やエラーハンドリングを行うことが大切です。
データ型の選び方
INT型を選ぶ際には、実際に格納するデータの範囲を考慮することが大切です。例えば、数千人の会員を想定する場合、INT型ではなくSMALLINTを選ぶことでメモリを節約できます。データが将来的に増えることも考慮して、適切なデータ型を選択しましょう。
INT型の具体的な使用例
実際のデータベース設計において、INT型はさまざまな場面で利用されます。以下に、いくつかの具体例を挙げます。
例1:ユーザーIDの管理
CREATE TABLE users (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
age TINYINT UNSIGNED,
PRIMARY KEY (user_id)
);
この例では、ユーザーIDをINT型で格納しています。符号なし(UNSIGNED)を指定しているので、最大で4,294,967,295人分のユーザーを管理できます。
例2:製品在庫数の管理
CREATE TABLE products (
product_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
product_name VARCHAR(100) NOT NULL,
stock SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (product_id)
);
この例では、在庫数をSMALLINT型で管理しています。数千の在庫を想定する場合、SMALLINT型で十分です。
INT型のメリットとデメリット
メリット
- 格納サイズが小さい:データベースのパフォーマンスに影響を与えにくく、効率的にデータを扱えます。
- 計算が高速:整数データは計算が速いため、大量のデータ処理に適しています。
- 幅広い用途:ID、数量、年齢、スコアなど、多様なデータを格納可能です。
デメリット
- 範囲に限界がある:範囲外の数値を扱いたい場合、BIGINTなど他のデータ型を選ぶ必要があります。
- 不正なデータ入力のリスク:例えば負の値を意図的に入れることができないため、意図した値でない場合が発生する可能性もあります。
MySQLのINT型には「桁数の指定」が可能で、たとえば「INT(5)
」のように記述します。この指定は一見「格納できる数値の桁数」を意味しているように見えますが、実際にはそうではありません。INT型の桁数指定がどのような意味を持つのか、またどう活用できるのかを詳しく解説します。
INT型の表示幅指定とは?
MySQLでのINT型の桁数指定(例:INT(5)
)は、数値の「表示幅」を設定するもので、実際に格納できる数値の「範囲」や「サイズ」には影響を与えません。たとえば、INT(5)
とINT(10)
は、どちらも同じ4バイトのメモリを使用し、格納できる数値の範囲も同じです。
実際の例
例えばINT(5)
で値を指定した場合、値が「5桁」以内に収まるとは限らず、範囲内の数値(-2,147,483,648 から 2,147,483,647 まで)が格納されます。
INT(5)
での指定:数値の範囲に制限はない(実際の範囲は-2,147,483,648
〜2,147,483,647
)。INT(10)
での指定:同様に範囲に制限はなく、格納できる数値の上限は変わらない。
桁数指定の用途:ゼロ埋めとZEROFILLオプション
桁数指定は単独では見た目の意味しか持たないため、桁数指定を実際に活用するには「ZEROFILL(ゼロ埋め)」オプションと組み合わせる必要があります。
ZEROFILLの使用例
ZEROFILL
オプションを付けると、指定した桁数に満たない場合、左側を「0」で埋めて表示します。これにより、例えばIDやシリアル番号など、決まった桁数で見せたい場合に便利です。
CREATE TABLE products (
product_id INT(5) ZEROFILL,
product_name VARCHAR(100)
);
上記のテーブルでproduct_id
に1を挿入すると、出力結果は「00001」となり、5桁の表示幅に合わせて左側がゼロで埋められます。
- 例:
product_id
が「123」の場合 →0123
と表示される
ZEROFILLを指定する場合、MySQLは自動的に「符号なし(UNSIGNED)」を適用します。負の数はゼロ埋めに適さないため、整数が0から始まる正の数のみで管理する仕様になります。
INT型の桁数指定のメリットとデメリット
メリット
- 見た目を統一できる:IDやコードなど、桁数が揃っていると視認性が向上します。
- 帳票や出力フォーマットに適している:定型的な桁数で出力する必要がある場合に便利です。
デメリット
- 格納されるデータの実体は変わらない:見た目だけの設定であり、データの範囲やサイズには影響を与えないため、実際の数値としては意図した通りにならない場合もあります。
- 符号なしへの自動変換:ZEROFILLを使用すると符号が付けられないため、符号付きが必要な場合には適しません。
INT型の桁数指定を使う場面と注意点
桁数指定とZEROFILLは、見た目を整えたい場合や固定の桁数で出力したい場合に便利です。例えば商品コードや従業員IDのように、番号を桁揃えして表示することでデータを視覚的に整えるといった用途に適しています。ただし、実際の格納範囲に影響がない点を理解した上で、使う場面を限定するのがポイントです。
桁数指定は「見た目のフォーマット」としての機能が強いので、データそのものを厳密に制限したい場合は別のチェック(例:チェック制約やトリガー)を活用する方が適しています。
今後の学び
INT型の桁数指定やZEROFILLの使い方を理解したら、他のデータ型(VARCHARやDECIMAL)でも似たようなフォーマット調整が必要になることがあります。数値データの管理方法やフォーマットの活用についてさらに学び、目的に応じて柔軟にデータ型を選べるようにしましょう。データベース設計において、見た目と実際のデータ管理を使い分けるスキルが大切です。
INT型のまとめと今後の学習
INT型はMySQLで頻繁に使われる基本的なデータ型であり、効率的なデータベース設計のために欠かせません。INT型を正しく使いこなすためには、データの範囲と用途に応じた選択が大切です。INT型の選択肢や範囲を理解することで、効率的なデータベースを構築できるでしょう。
今後は他のデータ型(FLOAT型やVARCHAR型)も学習し、データの特性に応じて最適なデータ型を選べるようにしていきましょう。どのデータ型を使うかを判断できるスキルは、データベース設計の質を大きく左右します。
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新入社員2024年11月23日「ゲシュタルト崩壊」とシステム開発
- 新入社員2024年11月23日データベースでテーブル名やフィールド名にスペースを使うことは、一般的には推奨されていません
- 新入社員2024年11月23日「データにはなぜ型が必要なのか?」を2進数の観点から解説
- 新入社員2024年11月23日ディスプレイの解像度の意味と変更方法