LoginSignup
0
0

More than 3 years have passed since last update.

MySQL入門!データ型 編

Last updated at Posted at 2020-09-17

MySQLが扱えるデータ型(一部)

整数

  • TINYINT ⇒ -128 ~ +127
  • INT ⇒ -21億 ~ +21億
  • BIGINT ⇒ -922京 ~ +922京

マイナスの値を扱うことがない場合は、データ型にUNSIGNEDキーワードを付けてあげることによってプラスの値しか扱わずなおかつ、扱える数字の幅が広くなる。

TINYINT UNSIGNED ⇒ 0 ~ 255

実数

  • DECIMAL ⇒ 固定小数点
  • FLOAT ⇒ 浮動小数点
  • DOUBLE ⇒ 浮動小数点(高精度)

文字列

  • CHAR ⇒ 0 ~ 255文字(主に商品コードなど固定長のデータに使用)
  • VARCHAR ⇒ 0 ~ 65535文字(文字数がバラバラになるようなデータに使用)
  • TEXT ⇒ 65535文字以上(VARCHARよりも長くなるようなデータに使用)
  • ENUM ⇒ 特定の文字列の内、1つだけの値を格納したいときに使用

    CREATE TABLE posts (
      greeting ENUM("Hello", "Bye", "Hey")
    );
    
    INSERT INTO posts (greeting) VALUES 
      ("Hello"),
      ("Bye"),
      ("Hey");
    

ちなみに、インデックス番号を指定しても値の取り出しは可能

CREATE TABLE posts (
  greeting ENUM("Hello", "Bye", "Hey")
);
-- インデックス番号でも取り出せる
INSERT INTO posts (greeting) VALUES 
  (1),
  (2),
  (3);
  • SET ⇒ 特定の文字列の内、複数の値を格納したいときに使用

    CREATE TABLE posts (
      greetings SET("Hello", "Bye", "Hey")
    );
    
    INSERT INTO posts (greetings) VALUES 
      ("Hello,Bye"),
      ("Hey"),
      ("Hey,Hello");
    

わかりやすいようにフィールド名を複数形に
データを挿入する際、,以外に空白などを入れてはいけないので注意

SET型は内部的に値を数値で管理していて、その数値を利用して値を取り出せる

CREATE TABLE posts (
  greetings SET("Hello", "Bye", "Hey") -- 左から2の0乗,2の1乗,2の2乗...
);

-- INSERT INTO posts (greetings) VALUES 
--   ("Hello,Bye"),
--   ("Hey"),
--   ("Hey,Hello");
-- 2つ並んだ値はそれぞれが持つ内部数字を足す
INSERT INTO posts (greetings) VALUES 
  (3),
  (4),
  (5);

真偽値

  • BOOL ⇒ TRUE / FALSE(1がTRUE、0がFALSEで表される)

    CREATE TABLE posts (
      boolean BOOL
      );
    
    INSERT INTO posts (boolean) VALUES 
      (TRUE),
      (FALSE),
      (0);
    

日時

  • DATE ⇒「日付」を扱いたいときに使用
  • TIME ⇒「時間」を扱いたいときに使用
  • DATETIME ⇒「日時」を扱いたいときに使用

    CREATE TABLE posts (
      created DATETIME
    );
    
    INSERT INTO posts (created) VALUES 
      ("2020-11-11 12:22:03"),
      ("2020-03-03"),
      (NOW());
    

終わりに

ここで紹介したデータ型はごく一部です。
データ型はまだまだたくさんあります。
MySQLを勉強する中で、わかりやすくまとまっているなーと思うサイトを見つけたので、こちらもぜひ見てみてください。

  • DBOnline

  • 2020/10/16 追記を追加しました。
    独学中に見たことがなかったSERIALなるものと遭遇したので、備忘録の意味も込めて追記しました。

追記

SERIAL
BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE の別名。

実装例

mysql> create table serial
    -> (
    -> id SERIAL
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> desc serial;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type                | Null | Key | Default | Extra          |
+-------+---------------------+------+-----+---------+----------------+
| id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
+-------+---------------------+------+-----+---------+----------------+

上記のようにfield名にSERIALを付けると、データ型NOT NULLPRIMARY KEYAUTO_INCREMENTの設定をやってくれる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0