MySQL のデータ型とフィールド属性の原理と使用法の詳細な説明

MySQL のデータ型とフィールド属性の原理と使用法の詳細な説明

この記事では、MySQL のデータ型とフィールド属性について説明します。ご参考までに、詳細は以下の通りです。

この記事の内容:

  • データ型
    • 数値型
      • 整数
      • 浮動小数点
      • 固定小数点型
    • 日付と時刻の種類
    • 文字列型
    • 補充:
      • 表示幅とゼロフィル
      • レコード長
  • フィールドプロパティ
    • 空\空でない値: NULL、NOT NULL
    • 主キー
    • ユニークキー: ユニークキー
    • 自己成長: auto_increment
    • デフォルト値: デフォルト
    • フィールドの説明: コメント
    • 補充:
      • 複合キー

リリース日: 2018-04-08


データタイプ:

MySQL のデータ型は、保存されるデータの型です。

数値型:

  • 整数型: tinyint、smallint、mediumint、integer、bigint
    • デフォルトは符号付きです。符号なしのデータ型を使用する必要がある場合は、最後に「UNSIGNED」を追加します。
タイプ略語バイトサイズ(符号付き) 範囲(符号なし) 範囲述べる
整数型:
小さな1 0~255 -128~127
スモールイント2 0~65535 -32768~32767
ミディアムミント3 0~16777215 -8388608~8388607
整数内部4 0~4294967295 -2147483648~2147483647
ビッグイント8 0~2 64 -1 -2 63 ~2 63 -1
  • 小数点タイプ:
    • 浮動小数点型: float(size,d), double(size,d)
      • size は値の最大桁数、d は小数点の右側の桁数です (その桁数を入力しなくても、その桁は埋められます)。
      • FLOAT の精度は 6 ~ 7 桁(状況による? 結局マシンは 2 進数で保存されます)、DOUBLE の精度は 14 ~ 15 桁です。
      • 整数部の数は SIZE-D です。直接格納される値の数はこれより多くできません。ただし、浮動小数点数を四捨五入して整数がオーバーフローし、最大桁数を超える場合は、システムで許可されます (バージョンによっては許可されなくなったようですので、一般的には小数点以下の桁数はこれを超えないようにしてください)。
      • 多くの場合、2 つの浮動小数点の値の範囲 (非常に大きい) に注意する必要はありませんが、その精度には注意する必要があります。
      • imageimage
    • 固定小数点型: 10進数(サイズ,d)
      • size は値の最大桁数で、最大 65 です。d は小数点の右側の最大桁数で、最大 30 です
      • 固定小数点型では、小数部の丸めにより整数部が範囲を超えることはできません。
      • DECIMAL は精度を失いません。これは、「文字列」ストレージを使用していると理解できます (MYSQL の権威あるガイドではそう述べられています)。
      • image
    • 括弧のない float、double、decimal のデータ型は、小数部がないことを表します。

日付と時刻の種類:

日付と時刻の種類には、日付、時刻、日付時刻、タイムスタンプ、年が含まれます。

  • Datetime: 時刻と日付。形式は YYYY-MM-DD HH:II:SS、範囲は 1000 から 9999 です (一部のバージョンではすでに 0 から 9999 までが許可されていますか? よくわかりません)。
    • image
  • 日付: 日付。形式は YYYY-MM-DD、範囲は 1000 から 9999 です。
    • image
  • 時間: 期間。形式は HH:II:SS です。指定された時間は特定の間隔内であり、正または負の値にすることができます。 -838:59:59~838:59:59 の範囲は、特定の日付の前後の時間範囲を表します [24 時間以内の時間を表すためにのみ使用する場合、時間範囲は無視できます]
    • image
  • タイムスタンプ: 形式は YYYY-MM-DD HH:II:SS で、範囲は 1970-01-01 00:00:00 から 2038-01-19 03:14:07 です。[行レコードが変更されると、タイムスタンプは現在の時刻に変更されます。 】
    • image
  • 年: 年、範囲は 1901-2156
    • image
    • 元々は year(2) と year(4) の 2 つの形式がありましたが、5.7 で year(2) は削除されました。

    文字列型:

      • set : 文字列を設定します。特定の文字列をコレクションに追加します。

        • セットを定義した後は、セット要素の外側に文字列を挿入することはできません(条件を満たす複数の文字列を挿入することはできます)
        • 実際、コレクション文字列には数値のみが格納され、システムによって対応する文字列に自動的に変換されます。
        • セット内の各要素はバイナリ ビットに対応します。選択された要素は 1、選択されていない要素は 0 です。左側はバイナリの下位ビット、右側は上位ビットです。バイナリの結果は右から左に得られます。
    テーブルmy_setを作成します(
    趣味セット('サッカー','バスケットボール','卓球','コンピューター')
    )文字セットutf8;
    
    my_set に値 ('basketball,computer') を挿入します。
    my_set値に挿入(3);-- 3=0011
    my_set 値に挿入(5);-- 5=0101 

    image

      • enum : 列挙文字列

        • これは set に少し似ていますが、ここに挿入できる文字列は 1 つだけです (set 型のフィールドの値は複数の set 要素にすることができますが、enum はそのうちの 1 つにしかできません)
        • 可能なデータをリストし、実際に保存できるのはリストされたデータのみです。
        • 列挙型を使用すると、データを統合し、ストレージ スペースを節約できます (列挙型には数値のみが保存され、システムによって文字列に変換されます)。
        • 列挙要素は実際には定義された順に 1 から番号が付けられるため、列挙要素に対応する数値を直接挿入できます。
        • のように:
    テーブルmy_enumを作成します(
    性別 enum('男性','女性','不明')
    )文字セットutf8; 

    image

    • blob : バイナリデータ文字列

      • バイナリデータを保存する(あまり使用されない)
    • テキスト: テキスト文字列

      • テキストを保存する場合、文字数が 255 を超える場合は通常 text が使用されます。
    • varchar: 可変長文字列

      • varchar(L)、Lは文字長を表し、単位は文字、最大長は65536です。実際のストレージでは、長さを格納するために 1 ~ 2 バイトが必要です (1 または 2 は実際のサイズによって決まり、2 16 =35536、<= 255 の場合は通常 1 バイト)。使用時には、定義されたサイズに応じてスペースが割り当てられますが、実際のニーズに応じてスペースが削減されます (たとえば、指定されたサイズが 60 で、実際のサイズが 30 しかない場合、実際のスペースは 31 ~ 32 になります)。
      • L が 255 より大きい場合は、varchar ではなく Text を使用することをお勧めします。
      • image_thumb1
    • char: 固定長文字列

      • char(L)、Lは文字長を表し、単位は文字、最大長は255、Lが使用されていない場合のデフォルトは1です。
      • 異なる環境で文字が実際に占めるスペースは、文字のサイズによって異なります。UTF8環境では、char(4) が使用するバイト数は 4*3=12 です。

    補充:

      • 表示幅とパディング:

        • 列タイプの後に表示される値は、データが最終的に表示される最小桁数 (符号を含む) を表します。
        • 通常、表示するには小さすぎるデータにはスペースが埋め込まれます。また、zerofill を使用してゼロを埋めることもできます (ゼロを埋めると、データ型は自動的に符号なしになります)。
        • 小さな(3)スペースパディング効果: image 、ゼロフィル効果: image
    テーブルmyInt(t1 TINYINT(3))を作成します。
    myInt テーブルを削除します。
    myInt値(127)、(1)に挿入します。
    myInt から * を選択します。
    テーブルmyIntを変更し、t1 tinyint(3)をゼロフィルします。
    myInt から * を選択します。
    • レコード長の問題があるため、文字列を簡単に保存するために最大サイズを使用しないでください。

      • MySQL では、データは 65535 バイトを超えてはならないと規定されています。
      • いずれかのフィールドで null が許可されている場合、システムはレコード全体から 1 バイトを自動的に保存して NULL を格納します。
      • テキストはレコードの長さを占有せず、追加で保存されます。
      • UTF8 の varchar の上限は 65535-2 (長さを格納するために 2 バイト必要) / 3 = 21844 なので、最大文字数は 21844 です。
      • GBK における varchar の上限: 65535-2 (長さを格納するには 2 バイト必要) /2=32766

    フィールドプロパティ:

    フィールド属性は、データ型以外のフィールドの属性であり、通常、空/空でない値、主キー、一意のキー、自動増分、デフォルト値、説明、その他の属性が含まれます。

    空\空でない値: NULL、NOT NULL

    • デフォルトでは、フィールドのデータは空のままにできます。たとえば、個人の情報レコードには電子メール アドレスがない場合があります (これを「空の文字列」で表すことを検討する人もいます)。入力する必要のないフィールドは null に設定できますが、たとえば、必須データを入力せずに空白のままにしておく場合は、このフィールドを null 以外に設定できます。
    • 空のデータが許可され、空のデータは null として表示されます。 image
    • 空でないフィールドに null を挿入すると、エラーが報告されます。 image
    • null\not null 属性を定義する方法 (null はデフォルトで許可されるため、主に not null に焦点を当てます): image ; もちろん、フィールドのフォーマットを変更することで、フィールドに非NULL属性を定義することもできます。

    主キー

    • 主キーは各レコードを一意に識別するために使用されます(全員が独自のIDカードを持っています)
    • 各テーブルには主キーを 1 つだけ設定できます。
    • 一意の識別子であるため、主キー フィールドのデータは空にできず、主キー フィールドのデータ値を繰り返すこともできません。
    • 主キーは検索速度を向上できるインデックスでもあります。
    • 主キーの定義:
      • 1. テーブル構造を定義するときに、フィールドの属性として定義します。 imageimage
      • 2. テーブル構造を変更し、主キーを持つフィールドを追加します。
      • 3. テーブル構造を変更し、フィールドに主キー属性を追加します。 image
    • 主キーの目的: 主キーの主な目的は、各レコードを一意に識別することです。たとえば、2 つのテーブル (学生テーブルと教師テーブル) 間の多対多の関係を 1 つのテーブルにカプセル化する場合、抽出されたマッピング フィールドは通常、それぞれの主キーになります。 image ; 主キー データは繰り返し不可能であるため、データの一意性を制限するためにも使用されます。
    • 主キーの削除:
      テーブル名を変更し、主キーを削除します。

    ユニークキー: ユニークキー

    • 一意キーの機能は主キーの機能と似ていますが、主キーは 1 つしか存在できないのに対し、一意キーは複数存在でき、一意キーのフィールドのデータは空でもかまわないという点が異なります。
    • 一意のキーを使用すると、フィールド内のデータが重複しないようにフィールドを制約できます。
    • 一意のキーも null ではなく、テーブルに主キーがない場合、desc テーブル構造に主キーとして表示されます。
    • 一意キーが null を許可しない場合、関数は主キーと同じになります。
    • ユニークキーの定義方法は主キーを参照することができます。
    • 一意のキーの削除:
      alter table table name drop index unique key name; -- 一意のキーは、デフォルトでフィールド名を使用して名前を定義します。

    自己成長: auto_increment

    • 自動増分機能は、レコードが挿入されるにつれてフィールドのデータを増やすことです(このフィールドにデータを挿入せずに)。
    • 自己増分の前提は、このフィールドが主キーや一意のキーなどの「インデックス」でなければならないということです。
    • 自己増分の前提は、このフィールドのデータ型が数値型であることです。(float が指定された場合、小数にはならず、整数のみになります)
    • テーブルには自動インクリメントを 1 つだけ設定できます。
    • 値が指定されていないか null が指定されている場合にのみ、フィールドは正しく自動的に増加されます。特定の自己増加が失敗した場合、フィールドは次回も現在のフィールドの最大値から自動的に増加し続けます。
    • 自動成長を定義する方法: image ; もちろん、フィールドのフォーマットを変更することで、フィールドに非NULL属性を定義することもできます。
    • 自動成長の変更:
      • 成長率を変更します: set auto_increment = value;
      • 次の増加の値を変更します: alter table table name auto_increment = value; [変更された値は増加のみ可能で、減少はできません。データ重複の問題が発生する可能性があるためです]
    • 自動増分を表示します: 「auto_increment%」のような変数を表示します。
    • 自己増分の削除: 削除するには alter を使用します。alter がフィールド属性を変更する場合、元の属性が含まれていない場合は削除されます。

    デフォルト値: デフォルト

    • デフォルト値の機能は、フィールドに値を割り当てない場合に、デフォルト値をデータとして使用することです。たとえば、性別が選択されていない場合は、デフォルトで「機密」が使用されます。
    • デフォルト値は次のように定義されます。 image
    • image

    フィールドの説明: コメント

    • フィールドの説明は、フィールドを説明するために使用されます。データ テーブルの作成ステートメントを表示するときに表示され (選択結果には表示されません)、特定のフィールドの意味を理解するのに役立ちます。
    • 意味: image
    • image

    補充:

    • 複合キー: 複数のフィールドを 1 つのキーに組み合わせることができます。たとえば、学生は複数のコースを受講できますが、学生 ID とコース ID は組み合わせたときに一意である必要があります。ここでは、主キーを使用してこの状況を制限します。
      • 定義方法(複合は主キーを例にとります): image
      • データ制約(上記の表を例に挙げます): image

    MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」

    この記事が皆様のMySQLデータベース設計に役立つことを願っています。

    以下もご興味があるかもしれません:
    • MySQL データ型の完全分析
    • MySQL ノート: データ型の詳細な説明
    • MySQL データ型の説明
    • MySql データ型チュートリアル例の詳細な説明

    <<:  商品クエリ機能を実現するJavaScript

    >>:  Vue はフォームデータ検証のサンプルコードを実装します

    推薦する

    JavaScript の 50 以上のユーティリティ関数の概要

    JavaScript は多くの素晴らしい機能を備えています。この記事では、作業効率の向上とコードのデ...

    Centos7 環境でソースコードから mysql5.7.16 をインストールする方法の詳細な説明

    この記事では、centos7 環境でソース コードから mysql5.7.16 をインストールする方...

    MySQL ロール関数の紹介

    目次序文: 1. 役割の紹介2. 役割に関連する操作要約:序文:前回の記事では、MySQLの権限管理...

    Vant+postcss-pxtoremはブラウザ適応機能を実装します

    Remレイアウトの適応Vant のスタイルでは、デフォルトで px を単位として使用します。rem ...

    eject を使用せずに create-react-app の設定を変更する方法

    1. イジェクトが推奨されないのはなぜですか? 1. eject を実行した後、どのような変化があり...

    MySQL で準備、実行、割り当て解除ステートメントを使用するチュートリアル

    序文MySQLでは、準備、実行、割り当て解除を正式にはPREPARE STATEMENTと呼びます。...

    IntelliJ IDEA に Docker プラグインをインストールする詳細な手順 (2018 バージョン)

    目次1. 開発環境2. dockerプラグインをインストールする1. アイデアのインストール2. イ...

    mysql8.0.19 でパスワードを忘れた場合の完璧な解決策

    おすすめの読み物: MySQL 8.0.19 は、間違ったパスワードを 3 回入力するとアカウント ...

    FileZilla_Server:425 データ接続を開けない問題を解決する方法

    FileZilla Serverをサーバーにインストールすると、425データ接続を開けない問題が発生...

    レスポンシブWebデザイン学習(1) - 画面サイズと使用率の決定

    最近では、モバイルデバイスがますます普及しており、ユーザーがスマートフォンやタブレットを使用して W...

    CSS3 の transition、transform、translate の違いと機能の簡単な分析

    変換して翻訳するTransform は、変換と変形を意味します。他の幅属性や高さ属性と同様に、CSS...

    Linux での SELinux を理解する方法

    目次1. SELinux の紹介2. SELinuxの基本概念2.1 仕事の種類2.2. セキュリテ...

    Html+CSS フローティング広告ストリップの実装

    1.html部分コードをコピーコードは次のとおりです。 <!DOCTYPE html> ...

    ByteDance インタビュー: JS を使用して Ajax 同時リクエスト制御を実装する方法

    序文正直に言うと、最近とても混乱していると感じています。テクノロジーと人生について。また、将来の発展...

    JavaScriptエンジンV8の実行プロセスの詳細な説明

    目次1. V8ソース2. V8サービスターゲット3. V8の初期アーキテクチャIV. V8の初期アー...