MySQL sql_modeの使用詳細

3709 ワード

前言
前の文章の「MySQLケース:一つのデータがなくなった惨事」の子供靴を見たことがあると信じています。modeは非常に重要な構成であり、次にこの構成項目の詳細な解析をもたらす。
sqlモデルの詳細
sqlmodeは、SQL構文サポートとデータチェックに直接影響を与えます。非常に多くのオプションが含まれています。ここで、5.7バージョンのデフォルト値は
「ONLYFULL_GROUT_BY,STRICT_TRANS_TABLES、NO_ゼロガスIN_DATE、NO_ゼロガスDATEERROR_FORDIVISION_BY_ゼロ、NO_AUTO_CREATE_US ER,NO_ENGINESUBSTITTION」
を選択します。
最も重要なオプション
sqlmodeの最も重要なオプションは、以下の3つを含みます。
(1)ANSI:SQLシンタックスサポートを決定し、ANSIに設定すると、標準SQLシンタックスをより遵守します。
(2)STRICT_TRANS_TABLES:このオプションはデータチェックを決定します。事務的な記憶エンジンに対して、不正な値が発生した場合、当該事務は失敗してロールバックします。非事務的な記憶エンジンに対して、不正な値が最初の行に現れたら、その事務は失敗します。もし不正な値が中間に現れたら、不法な値を調整して警告を出します。
(3)TRADITIONAL:このオプションは従来の関係型データベースと一致することを決定します。いくつかの非正常な操作に対して、直接にエラーを報告し、警告の提示ではなく失敗しました。
すべてのオプション
sqlmodeには以下のオプションも含まれています。
(4)ALLOW_INVALLIDDATES:このオプションは厳密な日付チェックを行わないことにしました。これは月の範囲が1-12かどうか、日付の範囲が1-31かどうかだけを確認します。具体的な日付が有効かどうかはチェックしません。例えば、2020-04-31の不法な日付は許可されています。
(5)ANSI_QUOTES:このオプションは引用文字を決定します。二重引用符を引用文字として使用することができます。
(6)ERROR_FORDIVISION_BY_ゼロによる戻り値を決定する。有効でない場合、ゼロで割り出された戻り値はnullであり、警告しない。有効であるが、厳密でないモードでは、ゼロで割り出された戻り値はnullであり、アラームが発生する。有効かつ厳格なモードでは、ゼロで割り引かれると直接エラーが発生します。
(7)HIGH_NOT_PRECEDIENCE:このオプションはnot操作の優先度を決定します。有効化後、NOT a BETWEEN b AND cはNOT(a BETWEEN b AND c)と解析される。いくつかの古いバージョンでは、NOT a BETWEEN b AND cは(NOT a)BETWEEN b AND cと解析されている。
(8)IGNORE_SPACE:関数名と括弧の間のスペースを無視することを決定します。有効にすると、count(*)でもエラーが発生しません。
(9)NO_AUTO_CREATE_USER:このオプションは、grant文が自動的にユーザを作成しないことを決定します。古いです。grant文もユーザーを作成しません。
(10)NO_AUTO_VALE_ONするゼロ:このオプションは増列の生成を決定します。一般的に、自己増加列に0またはnullを挿入すると、システムは自動的に次の自己増値挿入を生成します。有効にすると、自分の列に0を挿入すると元の値0が保持されます。nullを挿入すると自動的に次の自己増値挿入が生成されます。
(11)NO_BACKSLASHESCAPES:このオプションはバックスラッシュ\の役割を決定します。有効にすると、バックスラッシュ\は変換記号ではなく、普通の文字として使用されます。
(12)NO_DIR_IN_CREATE:このオプションは作成テーブルを無視すると決めた時、すべてのINDEX DIRECTORORYとDATA DIRECTORYコマンドです。このオプションはライブラリからのみ有効です。
(13)NO_ENGINESUBSTITURTION:このオプションでテーブルの作成を決定した場合、存在しない/未サポートのストレージエンジンを指定すると、自動的にデフォルトの格納エンジンに変換されます。
(14)NO_FIELD_OPTTIONS:もう古いです。
(15)NO_KEYOPTTIONS:もう古いです。
(16)NO_TABLE_OPTTIONS:もう古いです。
(17)NO_UNSIGNED_SUBTRACTION:一般的に、整数間の減算(そのうちの一つは符号なし)は、符号なしとなり、結果がマイナスであればエラーとなります。このオプションを有効にすると、負の数は正常に処理されます。
(18)NO_ゼロガスDATE:このオプションは「0000-00-00」を挿入できるかどうかを決定します。有効でない場合は、「0000-00-00」を挿入して警告しないことができます。有効にしても非厳格モードであれば、「0000-00-00」は挿入できますが、警告が発生します。有効で非厳格モードの場合、「0000-00-00」は挿入できないと直接エラーが発生します。
(19)NO_ゼロガスIN_DATE:このオプションは月と日が00であるかどうかを決定します。有効でない場合、月と日は00で警告しないことができます。有効にしても非厳格モードであれば、月と日は00でありますが、警告が発生します。有効で非厳格モードであれば、月と日は00に直接エラーが発生しません。
(20)ONLY_FULL_GROUT_BY:このオプションはselect/having/order byの後の非重合フィールドを決定して、group by字句の中に必ず現れます。
(21)PAD_CHAR.TOFULL_LENGTH:通常の状況では、クエリcharタイプのフィールドは、後方の空洞データが裁断されます。このオプションを有効にすると、チャットタイプのフィールドを照会します。後ろの空洞データは裁断されません。
(22)PIPES_ASCONCAT:このオプションは、ORの同義語としてではなく、𞓜記号を文字列の接続オペレータとすることを決定します。
(23)REAL_ASFLOAT:このオプションは、REALをDOUBLE同義語ではなくFLOAT同義語とすることを決定する。
(24)STRICT_ALL_TABLES:このオプションはデータチェックを決定します。事務的な記憶エンジンに対して、不正な値が発生した場合、当該事務は失敗してロールバックします。非事務的な記憶エンジンに対して、不正な値が最初の行に現れたら、その事務は失敗します。もし不正な値が中間に現れたら、前の操作が成功し、後ろの操作が直接にエラーを出します。事務部分の成功部分が失敗した場合があります。
締め括りをつける
上の勉強を通して、皆さんのことを信じています。モデルの各オプションは、より詳細な理解があります。sqlについてmodeはどのように設定しますか?個人的な提案は以下の通りです。
(1)5.5/5.6バージョンに対して、sql_modeの提案は5.7のデフォルト値を参照して設定します。
(2)5.7バージョンに対して、sql_modeはデフォルトの値を維持すればいいです。
(3)8.0バージョンに対して、sql_modeも標準値を維持すればいいです。
sqlmodeの設定は、MySQLを非常に柔軟に様々なモードで動作させることができますが、同時にさまざまなリスクをもたらします。MySQLが様々な重要なシステムに広く適用されている場合、sql_modeは厳格な審査設定を行い、同時に開発コードを規範化管理する;この点は、MySQLバージョンの反復に伴い、公式のデフォルト値からも見られます。モデルの設定もますます厳しくなりました。
以上がMySQL sql_です。modeの使用詳細については、MySQL sql_modeの使用資料は他の関連記事に注目してください。