MySQLのINT型について

MySQLでデータベースを扱う際に、数値を格納するためのデータ型はとても重要です。その中でも「INT型」は非常によく使われます。今回は、MySQLのINT型について解説します。INT型はどのような特徴があり、どう活用すべきかについて詳しく見ていきましょう。


INT型とは

INT型は、整数(小数点のない数)を格納するためのデータ型です。「Integer」の略で、その名の通り、正の整数や負の整数を効率的に格納することができます。データベースでは数値を扱う場面が多く、例えば年齢や数量、IDなどを記録するのにINT型は最適です。

INT型の特徴

INT型の主な特徴は以下の通りです:

  • 範囲が広い:INT型は比較的広い範囲の数値を格納できます。
  • メモリ効率が良い:他のデータ型と比べて格納サイズが小さいため、メモリやストレージの利用が効率的です。
  • 高速:数値を直接扱えるため、検索や並べ替えが高速です。

INT型の種類

MySQLにはINT型にいくつかのサイズがあります。それぞれ異なる範囲と用途に適しているので、必要に応じて使い分けると便利です。

データ型格納サイズ(バイト)範囲(符号あり)範囲(符号なし)
TINYINT1-128 〜 1270 〜 255
SMALLINT2-32,768 〜 32,7670 〜 65,535
MEDIUMINT3-8,388,608 〜 8,388,6070 〜 16,777,215
INTまたはINTEGER4-2,147,483,648 〜 2,147,483,6470 〜 4,294,967,295
BIGINT8-9,223,372,036,854,775,808 〜 9,223,372,036,854,775,8070 〜 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型のメリットとデメリット

メリット

  1. 格納サイズが小さい:データベースのパフォーマンスに影響を与えにくく、効率的にデータを扱えます。
  2. 計算が高速:整数データは計算が速いため、大量のデータ処理に適しています。
  3. 幅広い用途:ID、数量、年齢、スコアなど、多様なデータを格納可能です。

デメリット

  1. 範囲に限界がある:範囲外の数値を扱いたい場合、BIGINTなど他のデータ型を選ぶ必要があります。
  2. 不正なデータ入力のリスク:例えば負の値を意図的に入れることができないため、意図した値でない場合が発生する可能性もあります。

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,6482,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型の桁数指定のメリットとデメリット

メリット

  1. 見た目を統一できる:IDやコードなど、桁数が揃っていると視認性が向上します。
  2. 帳票や出力フォーマットに適している:定型的な桁数で出力する必要がある場合に便利です。

デメリット

  1. 格納されるデータの実体は変わらない:見た目だけの設定であり、データの範囲やサイズには影響を与えないため、実際の数値としては意図した通りにならない場合もあります。
  2. 符号なしへの自動変換:ZEROFILLを使用すると符号が付けられないため、符号付きが必要な場合には適しません。

INT型の桁数指定を使う場面と注意点

桁数指定とZEROFILLは、見た目を整えたい場合や固定の桁数で出力したい場合に便利です。例えば商品コードや従業員IDのように、番号を桁揃えして表示することでデータを視覚的に整えるといった用途に適しています。ただし、実際の格納範囲に影響がない点を理解した上で、使う場面を限定するのがポイントです。

桁数指定は「見た目のフォーマット」としての機能が強いので、データそのものを厳密に制限したい場合は別のチェック(例:チェック制約やトリガー)を活用する方が適しています。


今後の学び

INT型の桁数指定やZEROFILLの使い方を理解したら、他のデータ型(VARCHARやDECIMAL)でも似たようなフォーマット調整が必要になることがあります。数値データの管理方法やフォーマットの活用についてさらに学び、目的に応じて柔軟にデータ型を選べるようにしましょう。データベース設計において、見た目と実際のデータ管理を使い分けるスキルが大切です。


INT型のまとめと今後の学習

INT型はMySQLで頻繁に使われる基本的なデータ型であり、効率的なデータベース設計のために欠かせません。INT型を正しく使いこなすためには、データの範囲と用途に応じた選択が大切です。INT型の選択肢や範囲を理解することで、効率的なデータベースを構築できるでしょう。

今後は他のデータ型(FLOAT型やVARCHAR型)も学習し、データの特性に応じて最適なデータ型を選べるようにしていきましょう。どのデータ型を使うかを判断できるスキルは、データベース設計の質を大きく左右します。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。