MySQLのカラム属性(フィールド属性):空、デフォルト値であるかどうかの付与問題に起因する思考.

1804 ワード

列のプロパティ:デフォルト値がNULLかどうか、デフォルト値がNULLかどうかを処理する前に、デフォルト値を処理する必要があります.ここで、デフォルト値の属性値は、1、なし(デフォルト、すなわち属性に値を割り当てない場合)を選択できます.2、NULL;3、CURRENT_TIMESTAMP;4、カスタマイズ(つまり、実際に基づいて、自分で設定します.例えば:0,').
1つのテーブル(少なくとも2つのカラムを持つ)について、1つのデータを挿入するときに、カラムに値を割り当てたくない場合は、次の方法があります.
  • 【デフォルト】属性を予想値に設定する.
  • 「自増」属性を「Yes」に設定します.
  • 「空かどうか」属性を「Yes」に設定します(注意:この設定は連帯して、「デフォルト値」属性をNULLに設定します.したがって、実際には、「デフォルト値」属性の付与問題も処理しなければなりません).

  • NULLについて
  • まず、「NULL」と「NULL」の概念を明らかにします.
  • MySQL公式NULLについての説明:
    NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.
    空の値はスペースを占有しません.MySQLのNULLは実はスペースを占有しています.例えば、コップがあります.空の値はコップが真空で、NULLはコップに空気がいっぱい入っていることを表しています.
    したがって、カラムが空でない場合は、カラムの値が空のデータを挿入できます.ここでは、データベースの検証を開く場合を捨てなければなりません.
    データベースのフィールドIDがNOT NULLに設定されているのは、そのフィールドがNULLにならないことを示すだけで、つまり
    INSERT INTO table(ID) VALUES(NULL);

    この場合、データベースはエラーを報告します.
    INSERT INTO table(ID) VALUES('');

    これはNULLとは説明できません.データベース・システムはID設定のデフォルト値に従って入力したり、自増フィールドであれば自動的にデフォルト操作を追加したりします.
    任意の数がNULLと演算されるのはNULLです.値がNULLに等しいかどうかを判断するには、=を単純に使用するのではなく、IS NULLキーワードを使用します.
    SELECT * FROM `test` WHERE col1 IS NOT NULL

    Null値でないと判断した場合:
    SELECT * FROM `test` WHERE col1 <> ''
  • NULLのインデックスへの影響
  • MySQLは比較を行う際にNULLがフィールド比較に関与するため,効率に一部影響を与える.
    また、BツリーインデックスはNULL値を格納しないので、インデックスのフィールドがNULLであればインデックスの効率が大幅に低下します.したがって、インデックス列を参照する場合は、インデックスを使用して使用しないことを防止するために、「空かどうか」属性を使用して制約することが望ましい.
    1970年、R.BayerとE.mccreightは、Bツリー(またはB-ツリー、B_ツリー)と呼ばれるバランスのとれたマルチフォークツリーを提案した.
  • まとめ
  • NULLをできるだけ避ける:行の列値がNULLでない限り、列をNOT NULL(列のプロパティ(空かどうか)に設定する必要があります.