今日、インターフェースの同時実行の問題を検証したところ、これまでredisで解決していた同時実行のプレッシャーがmysqlに移りました(redisはデータの設定と保存時に遅延があり、データの有効期限が切れるとデータベースからデータを取得する必要があり、ギャップが生じて大規模な同時実行と複数のデータ挿入のリスクが発生します。負荷分散のため、PHPのセマフォは使用できないため、mysqlのupdateを使用して同時実行を解決する必要があります。インデックスを設定した後、速度は遅くありませんが、プレッシャーがかかります)。フィールド (属性が符号なし 10 進数) を更新するときに、負の値を入力してもエラーは発生せず、自動的に 0 に変換されることがわかりました。長い間検索した結果、問題の原因は my.cnf の STRICT_TRANS_TABLES であることがわかりました。 この時点で、まずsql_modeを理解する必要があります MySQL サーバーはさまざまな SQL モードで動作し、さまざまなクライアントにさまざまなモードを適用できます。これにより、各アプリケーションは独自のニーズに応じてサーバーの動作モードをカスタマイズできます。モードは、MySQL がサポートする SQL 構文と、実行するデータ検証チェックの種類を定義します。これにより、さまざまな環境で MySQL を使用したり、MySQL を他のデータベース サーバーと組み合わせて使用したりすることが容易になります。 --sql-mode="modes" オプションを指定して mysqld を起動すると、デフォルトの SQL モードを設定できます。上書きしたい場合は、この値を空にすることもできます (--sql-mode="")。 SET [SESSION|GLOBAL] sql_mode='modes' ステートメントを使用して sql_mode 変数を設定することにより、起動後に SQL モードを変更することもできます。 GLOBAL 変数を設定するには SUPER 権限が必要であり、その時点から接続するすべてのクライアントの操作に影響します。 SESSION 変数を設定すると、現在のクライアントにのみ影響します。どのクライアントも、いつでも自身のセッション sql_mode 値を変更できます。 sql_mode は、カンマ (',') で区切られたさまざまなモードのリストです。 SELECT @@sql_mode ステートメントを使用して現在のモードを照会できます。デフォルト値は空です(モードは設定されていません)。 主な重要なsql_mode値は次のとおりです。 ANSI 標準 SQL との一貫性を高めるために構文と動作を変更します。 STRICT_TRANS_TABLES 指定された値をトランザクション テーブルに挿入できない場合、ステートメントは中止されます。非トランザクション テーブルの場合、値が単一行ステートメントまたは複数行ステートメントの行 1 に表示されると、ステートメントは破棄されます。 伝統的 MySQL を「従来の」SQL データベース システムのように動作させます。このモードを簡単に説明すると、列に誤った値が挿入されたときに「警告ではなくエラーを出す」ということです。注意: エラーが見つかった場合は、INSERT/UPDATE を直ちに中止してください。非トランザクション ストレージ エンジンを使用している場合、エラー発生前に行われたデータ変更は「ロールオーバー」されず、「部分的に実行された」更新となるため、これは望ましいことではありません。 このマニュアルでは、「厳密モード」とは、少なくとも STRICT _TRANS_TABLES または STRICT _ALL_TABLES が有効になっているモードを意味します。 STRICT_TRANS_TABLES モードと STRICT_ALL_TABLES モードの違いは次のとおりです。 トランザクション テーブルの場合、STRICT_ALL_TABLES または STRICT_TRANS_TABLES モードが有効になっていると、ステートメントに不正な値または欠落した値があるとエラーが発生します。声明は放棄され、転がされる。 非トランザクション テーブルの場合、挿入または更新の最初の行に不正な値が発生した場合、両方のモードは同じように動作します。ステートメントは中止され、テーブルは変更されません。ステートメントが複数の行を挿入または変更し、不正な値が 2 行目以降に発生した場合、結果はどの厳密なオプションが有効になっているかによって異なります。 STRICT_ALL_TABLES の場合、MySQL はエラーを返し、残りの行を無視します。ただし、この場合、前の行はすでに挿入または更新されています。これは部分的な更新が可能であることを意味しますが、おそらくこれは望ましいことではありません。これを回避するには、テーブルを変更せずに破棄できる単一行ステートメントを使用するのが最適です。 STRICT_TRANS_TABLES の場合、MySQL は不正な値を列に最も近い有効な値に変換し、調整された値を挿入します。値が欠落している場合、MySQL は列に暗黙のデフォルト値を挿入します。どちらの場合でも、MySQL はエラーを生成してステートメントの実行を続行するのではなく、警告を生成します。 その他のモードは次のとおりです: ALLOW_INVALID_DATES: 日付の有効性を完全にはチェックせず、月が 1 から 12 の間であるか、日が 1 から 31 の間であるかのみをチェックします。DATE と DATETIME にのみ有効で、TIMESTAMP には使用できません。TIMESTAMP では常に有効な入力が必要なためです。 ANSI_QUOTES: 有効にすると、" (二重引用符) が識別子として解釈されるため、文字列を二重引用符で囲むことはできません。 ERROR_FOR_DIVISION_BY_ZERO: 有効にすると、データがゼロで除算された場合 (または MOD(x,0))、挿入または更新中にエラーが発生します。有効にしない場合は、データがゼロで除算されたときに警告が発生し、システムは NULL を返します。 HIGH_NOT_PRECEDENCE: 有効にすると、以前の古いバージョンの優先度を取得できます。 NO_AUTO_CREATE_USER: GRANT が空のパスワードを持つユーザーを作成することを防ぎます。 NO_AUTO_VALUE_ON_ZERO: 自動インクリメント列に 0 または NULL を挿入すると、次の自動インクリメント値にはなりません。 NO_BACKSLASH_ESCAPES: バックスラッシュ「\」はエスケープ文字ではなく通常の文字として扱われます NO_DIR_IN_CREATE: テーブルを作成するときに、すべてのインデックス ディレクトリとデータ ディレクトリのオプションを無視します。 NO_ENGINE_SUBSTITUTION: 有効にすると、必要なストレージ エンジンが無効になっているかコンパイルされていない場合にエラーがスローされます。有効にしない場合は、代わりにデフォルトのストレージ エンジンが使用され、例外がスローされます。 NO_UNSIGNED_SUBSTRACTION: 有効にすると、2 つの UNSIGNED 型を減算すると SIGNED 型が返されます。 NO_ZERO_DATE: 有効にすると、「0000-00-00 00:00:00」などのゼロ日付を挿入できなくなります。エラーが発生します。有効にしない場合は、挿入できますが、警告のみがスローされます。 NO_ZERO_IN_DATE: 有効にすると、月と日をゼロにすることはできません。「1999-01-00」のように NO_ZERO_DATE と一緒に有効にすると、警告ではなくエラーがスローされます。このオプションを単独で有効にすると、警告がスローされ、「0000-00-00 00:00:00」が挿入されます。 ONLY_FULL_GROUP_BY: GROUP BY 集計操作の場合、選択内の列がグループ化に表示されない場合は、この SQL ステートメントは無効です。 PAD_CHAR_TO_FULL_LENGTH: 有効にすると、CHAR 型は空のデータを切り捨てません。 PIPES_AS_CONCAT: 「||」を「or」演算子ではなく連結演算子として扱います。 REAL_AS_FLOAT: REAL を DOUBLE の同義語ではなく、FLOAT の同義語として扱います。 組み合わせオプション: ·ANSI: REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、ANSI ·オラクル: PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER、ORACLE 伝統的: STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION、TRADITIONAL MSSQL: PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、MSSQL、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、MSSQL DB2: PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、DB2 MYSQL323: 優先度が高くない、MYSQL323 MYSQL40: 優先度が高くない、MYSQL40 MAXDB: PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER、MAXDB 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: JavaScript はドラッグ可能なモーダルボックスを実装します
背景ディープラーニング モデルの推論には、特定のデバイスが使用されます。マシンは、モデルの読み込み、...
相対パス - ファイルを参照する Web ページの場所に基づいて確立されたディレクトリ パス。そのた...
イメージの構築は、DevOps プロセスにおいて非常に重要なプロセスです。一般的に、イメージの構築と...
<br />これは 123WORDPRESS.COM が提供する一連のチュートリアルです...
成果を達成する 実装コードhtml <div id=コンテナ> いらっしゃいませ <...
目次バッチコピー copyWithin()配列を埋めるメソッド fill()指数の計算方法については...
目次1. SQL言語の基本機能の紹介2. データ定義言語の目的3. データベースの作成と破棄4. デ...
1. すべてのタグには対応する終了タグが必要です以前の HTML では、<p> や &l...
MySql ダウンロード1. 公式サイトを開き、ダウンロード パスを見つけます。ダウンロード アドレ...
序文「データベース トランザクションの特徴は何ですか?」と尋ねられたら、 ACID 特性である原子性...
この記事では、js+canvasコードの雨効果の具体的なコードを参考までに共有します。具体的な内...
会社のビジネス要件により、次の図の赤い領域の効果を達成する必要があります。 効果の説明: 1. 赤い...
Nginx は同じドメイン名で構成されており、http と https の両方でアクセスできます。証...
目次1. 解凍する2. データフォルダを作成する3. MySQLに環境変数を追加する3.1 コントロ...
【序文】 Vue と React の CSS モジュール ソリューションはどちらも、実装にローダーに...