SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

  • Security Online
  • DB Online
  • ニュース
  • 新着記事一覧
  • イベント

    コスト高にならない「Oracle Database」クラウド移行の方策ー35年の知見からOCIと最新PaaSを徹底解説! powered by EnterpriseZine
    2025年10月17日(金) オンライン開催

    • SaaS ERP最前線──適者生存の市場を勝ち抜く企業はどこに

      SaaS ERP最前線──適者生存の市場を勝ち抜く企業はどこに

    • IT部門から“組織変革”を~気鋭のトップランナーを訪ねる~

      IT部門から“組織変革”を~気鋭のトップランナーを訪ねる~

    • Next エンタープライズAI

      Next エンタープライズAI

    • 酒井真弓の『Enterprise IT Women』訪問記

      酒井真弓の『Enterprise IT Women』訪問記

  • ブログ

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

最新イベントはこちら!

コスト高にならない「Oracle Database」クラウド移行の方策ー35年の知見からOCIと最新PaaSを徹底解説! powered by EnterpriseZine

2025年10月17日(金) オンライン開催

EnterpriseZine(エンタープライズジン)

EnterpriseZine編集部が最旬ITトピックの深層に迫る。ここでしか読めない、エンタープライズITの最新トピックをお届けします。

『EnterpriseZine Press』

2025年夏号(EnterpriseZine Press 2025 Summer)特集「“老舗”の中小企業がDX推進できたワケ──有識者・実践者から学ぶトップリーダーの覚悟」

MySQL事始

MySQL事始 データ型

第7回


選択肢型

データに格納する値をあらかじめ設定した特定の値だけに制限することができます。ENUM型は単一の値のみ、SET型は複数の値を選択することができます。

このENUM型は、サンプルデータのCountryLanguageテーブルで、「その言語がその国の公用語か」を表すIsOfficial列で使用されています。他にもCountryテーブルの「大陸名」を表すContinent列で使用されています。



mysql> SHOW CREATE TABLE CountryLanguage\G
*************************** 1. row ***************************
       Table: CountryLanguage
Create Table: CREATE TABLE `CountryLanguage` (
  `CountryCode` char(3) NOT NULL DEFAULT '',
  `Language` char(30) NOT NULL DEFAULT '',
  `IsOfficial` enum('T','F') NOT NULL DEFAULT 'F',
  `Percentage` float(4,1) NOT NULL DEFAULT '0.0',
  PRIMARY KEY (`CountryCode`,`Language`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

あらかじめ設定した値以外の値を挿入更新すると、警告が表示され値は無視されます。"DEFAULT"値が設定されていれば"DEFAULT"値を、されていなければNULLが格納されます。



mysql> CREATE TABLE tf1 (TF ENUM('T','F'));
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO tf1 VALUES ('T');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO tf1 VALUES ('Z');
Query OK, 1 row affected, 1 warning (0.01 sec)

Warning (Code 1265): Data truncated for column 'TF' at row 1

mysql> SELECT * FROM tf1;
+------+
| TF   |
+------+
| T    |
|      |
+------+
2 rows in set (0.00 sec)

ENUM型は内部的には選択肢を番号に置き換えて格納しているため、値そのものでも割り当てられた番号でも参照、挿入などが可能です。




mysql> SELECT Code, Name, Continent FROM Country WHERE Continent = "Asia" LIMIT 2;
+------+----------------------+-----------+
| Code | Name                 | Continent |
+------+----------------------+-----------+
| AFG  | Afghanistan          | Asia      |
| ARE  | United Arab Emirates | Asia      |
+------+----------------------+-----------+
2 rows in set (0.00 sec)

mysql> SELECT Code, Name, Continent FROM Country WHERE Continent = 2 LIMIT 2;
+------+-------------+-----------+
| Code | Name        | Continent |
+------+-------------+-----------+
| NLD  | Netherlands | Europe    |
| ALB  | Albania     | Europe    |
+------+-------------+-----------+
2 rows in set (0.00 sec)

SET型は、値をカンマで区切って指定します。例えば、列の定義がSET('alpha', 'beta') NOT NULLとなっている場合、以下の4つの値を格納できます。



''
'alpha'
'beta'
'alpha,beta'

カンマで区切って指定できる値は最大64個です。

ENUM型と同様にあらかじめ設定した値以外の値を挿入更新すると、警告が表示され値は無視されます。



mysql> CREATE TABLE s1 (id SERIAL, mc SET('a', 'b', 'c') NOT NULL);
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO s1(mc) VALUES ('a'), ('a,c'), ('d');
Query OK, 3 rows affected, 1 warning (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 1

Warning (Code 1265): Data truncated for column 'mc' at row 3

格納されている値の取得にはLIKEFIND_IN_SET()関数を使用します。



mysql> SELECT * FROM s1 WHERE mc LIKE '%c%';
+----+-----+
| id | mc  |
+----+-----+
|  2 | a,c |
+----+-----+
1 rows in set (0.00 sec)

mysql> SELECT * FROM s1 WHERE FIND_IN_SET('a', mc) > 0;
+----+-----+
| id | mc  |
+----+-----+
|  1 | a   |
|  2 | a,c |
+----+-----+
2 rows in set (0.00 sec)

定義された値はENUM型同様に数値で格納されていますが、各値が2進数で扱われています。ここの例では、'a'は1、'b'は2、'c'は4となっています。'a''c'が含まれる列は合計の5となります。



mysql> SELECT * FROM s1 WHERE mc = 5;
+----+-----+
| id | mc  |
+----+-----+
|  2 | a,c |
+----+-----+
1 rows in set (0.00 sec)

列の定義が分かっている場合、ビット配列で該当する要素を1として検索することができます。以下では1要素目と3要素目を検索するためにb'101'としています。



mysql> SELECT * FROM s1 WHERE mc = CONVERT(b'101', UNSIGNED);
+----+-----+
| id | mc  |	
+----+-----+
|  2 | a,c |
+----+-----+
2 rows in set (0.00 sec)

 

この記事は参考になりましたか?


広告を読み込めませんでした

広告を読み込み中...

  • Facebook
  • X
  • Pocket
  • note
MySQL事始連載記事一覧

もっと読む

この記事の著者

梶山隆輔(カジヤマリュウスケ)

日本オラクル MySQL Global Business Unit Asia Pacific & Japan担当 MySQLソリューション・エンジニアリング・ディレクターオラクル社において、MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコンサルタントチームのアジア太平洋地域リーダー。多国籍なM...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3457 2012/02/10 17:56

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

  1. 1
    村田製作所が挑む「自律分散型DX」の現在地──80年の歴史に新たな基盤を築くDXリーダーの覚悟 NEW
  2. 2
    八子知礼氏に聞く、製造業DXのその先──宇宙ビジネスまで見据えた「AI×専門フレームワーク」の長期戦略とは? NEW
  3. 3
    「SplunkはCiscoによって進化する」本社経営陣が明かす、AI時代の“データ覇権”を握る新戦略 NEW
  4. 4
    松山市、変革を担う“推進リーダー”育成に挑んだ1年がかりの研修を振り返る──修了後の適正配置が課題に NEW
  5. 5
    なぜソニー銀行は勘定系システムのフルクラウド化を実現できたか? 成功の鍵を握る「技術負債を作らない」アプローチと、システム企画の舞台裏
  6. 6
    なぜMUFG、ソニー、セブン&アイはGoogleのAIを選んだのか?── Google Cloud幹部が語る日本企業との「共同のイノベーション」
  7. 7
    1年経っても冷めやらぬVMware買収騒動の余波……場当たり的な“離脱”の前に考えるべきポイント
  8. 8
    国内最大級のSaaS企業ラクスはあえてオンプレミス強化 「クラウドネイティブ・オンプレミス」戦略とは
  9. 9
    コロナ危機で仕込んだ「DXのタネ」が花開いた旭化成ホームズ “紙文化”残る不動産業界での奮闘劇
  10. 10
    IT部門は消滅する?大規模開発の常識を覆しかねない自律型AIエンジニア「Devin」のインパクトとは

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング

  1. 1
    村田製作所が挑む「自律分散型DX」の現在地──80年の歴史に新たな基盤を築くDXリーダーの覚悟 NEW
  2. 2
    八子知礼氏に聞く、製造業DXのその先──宇宙ビジネスまで見据えた「AI×専門フレームワーク」の長期戦略とは? NEW
  3. 3
    「SplunkはCiscoによって進化する」本社経営陣が明かす、AI時代の“データ覇権”を握る新戦略 NEW
  4. 4
    松山市、変革を担う“推進リーダー”育成に挑んだ1年がかりの研修を振り返る──修了後の適正配置が課題に NEW
  5. 5
    なぜソニー銀行は勘定系システムのフルクラウド化を実現できたか? 成功の鍵を握る「技術負債を作らない」アプローチと、システム企画の舞台裏
  6. 6
    なぜMUFG、ソニー、セブン&アイはGoogleのAIを選んだのか?── Google Cloud幹部が語る日本企業との「共同のイノベーション」
  7. 7
    1年経っても冷めやらぬVMware買収騒動の余波……場当たり的な“離脱”の前に考えるべきポイント
  8. 8
    国内最大級のSaaS企業ラクスはあえてオンプレミス強化 「クラウドネイティブ・オンプレミス」戦略とは
  9. 9
    コロナ危機で仕込んだ「DXのタネ」が花開いた旭化成ホームズ “紙文化”残る不動産業界での奮闘劇
  10. 10
    IT部門は消滅する?大規模開発の常識を覆しかねない自律型AIエンジニア「Devin」のインパクトとは