序文前回の記事「MySQL の事例: データ損失の悲劇」を読んだ方は、sql_mode が非常に重要な設定であることに気付いたと思います。次に、この設定項目について詳しく分析します。 sql_mode の説明sql_modeはSQL構文のサポートとデータの検証に直接影響します。これには多くのオプションがあり、バージョン5.7のデフォルト値は次のとおりです。
一般的に、変更することは推奨されません。 最も重要なオプションsql_mode の最も重要なオプションは次の 3 つです。 (1) ANSI: このオプションはSQL構文のサポートを決定します。ANSIに設定すると、標準SQL構文にさらに準拠するようになります。 (2) STRICT_TRANS_TABLES: このオプションはデータの検証を決定します。トランザクションストレージエンジンの場合、不正な値が現れるとトランザクションは失敗し、ロールバックします。非トランザクションストレージエンジンの場合、不正な値が最初の行に現れた場合、トランザクションは失敗します。不正な値が途中で現れた場合、不正な値は調整され、アラームがスローされます。 (3)従来型:このオプションは、従来のリレーショナルデータベースと一貫したパフォーマンスを決定します。一部の異常な操作については、警告プロンプトの代わりに失敗エラーが直接報告されます。 すべてのオプションsql_mode には次のオプションも含まれます。 (4)ALLOW_INVALID_DATES:このオプションは、厳密な日付検証を実行しないことを決定します。月の範囲が1〜12、日の範囲が1〜31であるかどうかのみを検証し、特定の日付が有効かどうかは検証しません。たとえば、不正な日付2020-04-31は許可されます。 (5)ANSI_QUOTES:このオプションは引用符文字を決定します。これにより、二重引用符 " をバッククォート ` と同様に引用符文字として使用できるようになります。 (6) ERROR_FOR_DIVISION_BY_ZERO: このオプションは、ゼロ除算の戻り値を決定します。有効になっていない場合、ゼロ除算の戻り値は null となり、警告は生成されません。有効になっていても非厳密モードの場合、ゼロ除算の戻り値は null となり、警告が生成されます。有効になっていて厳密モードの場合、ゼロ除算はエラーになります。 (7) HIGH_NOT_PRECEDENCE: このオプションは、否定演算の優先順位を決定します。有効にすると、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_VALUE_ON_ZERO: このオプションは、自動インクリメント列の生成を決定します。一般的に、自動インクリメント列に 0 または null を挿入すると、システムによって次の自動インクリメント列が自動的に生成されます。有効にすると、自動インクリメント列に 0 を挿入すると元の値 0 が保持され、null を挿入すると次の自動インクリメント列が自動的に生成されます。 (11) NO_BACKSLASH_ESCAPES: このオプションはバックスラッシュ\の効果を決定します。有効にすると、バックスラッシュ\はエスケープ文字としてではなく、通常の文字として使用されます。 (12)NO_DIR_IN_CREATE:このオプションは、テーブルを作成するときにすべてのINDEX DIRECTORYおよびDATA DIRECTORY命令を無視するかどうかを決定します。このオプションはスレーブデータベースでのみ有効です。 (13)NO_ENGINE_SUBSTITUTION:このオプションは、テーブルの作成時に存在しない/サポートされていないストレージエンジンが指定されているかどうかを決定し、デフォルトのストレージエンジンに自動的に変換します。 (14) NO_FIELD_OPTIONS: 非推奨。 (15)NO_KEY_OPTIONS:非推奨。 (16)NO_TABLE_OPTIONS:非推奨。 (17) NO_UNSIGNED_SUBTRACTION: 通常、整数(一方が符号なし)を減算すると、結果は符号なしとなり、結果が負の数になるとエラーが報告されます。このオプションを有効にすると、負の数を正常に処理できます。 (18) NO_ZERO_DATE: このオプションは、「0000-00-00」を挿入できるかどうかを決定します。有効になっていない場合、「0000-00-00」は警告なしで挿入できます。有効になっているが非厳密モードの場合、「0000-00-00」を挿入できますが警告が生成されます。有効になっていて非厳密モードの場合、「0000-00-00」は挿入できず、エラーが直接報告されます。 (19) NO_ZERO_IN_DATE: このオプションは、月と日を 00 にできるかどうかを決定します。有効になっていない場合、月と日を 00 にすることができ、警告は生成されません。有効になっているが非厳密モードの場合、月と日を 00 にすることができますが、警告が生成されます。有効になっていて非厳密モードの場合、月と日を 00 にできない場合はエラーが報告されます。 (20)ONLY_FULL_GROUP_BY:このオプションは、select/having/order byに続く非集計フィールドを決定し、group by句に出現する必要があります。 (21) PAD_CHAR_TO_FULL_LENGTH: 通常、char型フィールドを照会する場合、末尾の空データは切り捨てられます。このオプションを有効にすると、char型フィールドを照会する場合、末尾の空データは切り捨てられなくなります。 (22)PIPES_AS_CONCAT:このオプションは、||記号をORの同義語としてではなく、文字列連結演算子として扱うかどうかを決定します。 (23)REAL_AS_FLOAT:このオプションは、REALをDOUBLEの同義語ではなくFLOATの同義語として扱うかどうかを決定します。 (24) STRICT_ALL_TABLES: このオプションはデータの検証を決定します。トランザクションストレージエンジンの場合、不正な値が現れると、トランザクションは失敗し、ロールバックします。非トランザクションストレージエンジンの場合、不正な値が最初の行に現れた場合、トランザクションは失敗します。不正な値が途中で現れた場合、前の操作は成功し、後続の操作は直接エラーを報告し、トランザクションは部分的に成功し、部分的に失敗します。 要約する上記の学習を通じて、sql_mode のさまざまなオプションについて、より詳細に理解していただけたと思います。sql_mode の設定方法については、私の個人的な提案は次のとおりです。 (1)バージョン5.5/5.6の場合、sql_modeをデフォルト値5.7に設定することをお勧めします。 (2)バージョン5.7の場合は、sql_modeのデフォルト値を維持します。 (3)バージョン8.0ではsql_modeもデフォルト値のままにすることができます。 sql_mode 設定により、MySQL はさまざまなモードで非常に柔軟に実行できますが、さまざまなリスクも伴います。MySQL はさまざまな重要なシステムに広く使用されているため、sql_mode の設定を厳密に見直し、開発コードの管理を標準化することをお勧めします。実際、これは公式のデフォルト値からもわかります。MySQL のバージョンが繰り返されるにつれて、sql_mode 設定はますます厳格になっています。 上記はMySQL sql_modeの使い方の詳しい説明の内容です。MySQL sql_modeの使い方についてもっと知りたい方は、123WORDPRESS.COMの他の関連記事もぜひご覧ください! 以下もご興味があるかもしれません:
|
<<: アイデアを通じてプロジェクトをDockerにパッケージ化する方法
>>: ウェブデザインには目的、アイデア、思考、そして粘り強さがなければならない
目次Docker デプロイメント Always on クラスターDockerをインストールする建築関...
最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...
目次1.ソケットを作成する2. ソケットをバインドする3. 聞き手を作る。聞く4. 接続が受け入れら...
この記事では、主にMACオペレーティングシステムでのMySQL5.7とMySQLWorkbenchの...
1. Centos7.6システムを作成し、システムを最適化する1. NetworkManagerをオ...
<abbr>タグと<acronym>タグは、Web ページに表示される略語と...
目次序文コードの実装アイデア 1アイデア2要約する参照ドキュメント序文プロジェクト内の小さな要件ポイ...
まず、私たちがやりたいことは、serverA の usera を使用して、パスワードなしで serv...
MySQL では、char、varchar、text の各タイプのフィールドはすべて文字タイプのデー...
目次序文1. イベントとクリップボードを貼り付ける2. クリップボード内のコンテンツ形式3. HTM...
Springboot プロジェクトをサーバーにデプロイする方法としては、war パッケージにパッケー...
目次1. Tomcatを監視する方法2. Java独自の監視コマンド3. Tomcatのトラブルシュ...
Nginx の紹介Nginx (「エンジン x」) は、ロシアのプログラマー Igor Sysoev...
目次問題のシナリオ:解決: 1. フィールドを個別にチェックする2. フォームフィールドの下のフィー...
目次序文異なるコンピュータ上の 2 つの Node.js プロセス間の通信TCPソケットの使用HTT...