何人かの学生は、マスターとスレーブの間の不一致の問題に遭遇したと述べました。 一般的な状況としては、mysqldump を使用してデータをエクスポートおよびインポートすることによってスレーブ データベースが作成されます。作成が成功した後、mysqldump を使用してマスターとスレーブのテーブル構造が一貫しているかどうかを確認すると、一部のテーブル定義に不一致があることがわかります。 比較結果から、スレーブ側では 3 つの列の定義に「デフォルト null」が追加されていることがわかります。 誰かが環境を変更したのではないかと疑っていましたが、最終的には環境が改ざんされていないことが確認できました。次に、mysqldump を使用してデータをエクスポートし、source を使用してデータをスレーブ データベースにインポートする別のテストを実行しました。この現象がまだ発生することがわかったので、source コマンドにバグがあるかどうかを尋ねました。 実際、これは MySQL が暗黙のデフォルト値を内部的に処理する方法に関係しています。データ型に明示的なデフォルト値が含まれていない場合、MySQL は次の規則に従ってデフォルト値を決定します。 明示的な DEFAULT 句なしで NOT NULL 列にデータが入力された場合、 INSERT または REPLACE ステートメントに列の値が含まれていない場合、または UPDATE ステートメントによって列が NULL に設定される場合、MySQL は有効な SQL モードに従って列を処理します。 テーブル t が次のように定義されていると仮定します。 mysql> テーブル t(i int not null) を作成します。 ここで、i には明示的なデフォルト値はありません。 mysql> '%sql_mode%' のような変数を表示します。 +---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 変数名 | 値 | +---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | sql_mode | ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION | +---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ セット内の1行(0.01秒) mysql> t VALUES() に INSERT INTO します。 エラー 1364 (HY000): フィールド 'i' にデフォルト値がありません mysql> t VALUES(DEFAULT) に INSERT INTO します。 エラー 1364 (HY000): フィールド 'i' にデフォルト値がありません mysql> t VALUES(DEFAULT(i)) に INSERT INTO します。 エラー 1364 (HY000): フィールド 'i' にデフォルト値がありません マイSQL> 非厳密な SQL モードの場合: mysql> @@sql_mode を設定します。 クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒) mysql> '%sql_mode%' のような変数を表示します。 +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | SQL モード | | +---------------+-------+ セット内の 1 行 (0.00 秒) mysql> t VALUES() に INSERT INTO します。 クエリは正常、1 行が影響を受け、1 つの警告 (0.00 秒) mysql> t VALUES(DEFAULT) に INSERT INTO します。 クエリは正常、1 行が影響を受け、1 つの警告 (0.01 秒) mysql> t VALUES(DEFAULT(i)) に INSERT INTO します。 エラー 1364 (HY000): フィールド 'i' にデフォルト値がありません mysql> t から * を選択します。 +---+ | 私 | +---+ | 0 | | 0 | +---+ セットに2行(0.01秒) マイSQL> 特定のテーブルの場合、SHOW CREATE TABLE ステートメントは、明示的な DEFAULT 句を持つ列を表示します。暗黙のデフォルト値は次のように定義されます。 mysql> テーブル t1(id int,name varchar(20)) を作成します。 クエリは正常、影響を受けた行は 0 行 (0.04 秒) mysql> テーブル t1\G の作成を表示します ************************** 1. 行 **************************** 表: t1 テーブルの作成: CREATE TABLE `t1` ( `id` int(11) デフォルト NULL, `name` varchar(20) デフォルト NULL ) エンジン=InnoDB デフォルト文字セット=utf8mb4 セット内の 1 行 (0.00 秒) マイSQL> 上記は、MySQL が暗黙のデフォルト値を処理する方法の詳細です。MySQL の暗黙のデフォルト値の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Docker デプロイメント Consul 構成プロセスの分析
序文特に bash 環境では、スクリプトの実行方法によって結果が異なります。スクリプトを実行する方法...
序文Linux カーネルでは、netfilter は、パケット フィルタリング、ネットワーク アドレ...
目次仮想DOM仮想DOMとは何か仮想DOMの役割Vue の仮想 DOM vノードvNodeとはvNo...
序文クエリ情報が複数のテーブルから取得される場合、クエリのためにこれらのテーブルを結合する必要があり...
1. サーブレットとは何か1.1. 正式な言葉で説明する:サーブレットは、動的な Web リソースを...
プロジェクトシナリオ: Vueプロジェクトを実行したらインデントエラーが出ました。ideaコンパイラ...
目次テーマを動的に変更する最初の方法: 動的コンポーネント2番目の方法はルーティング分離です要約する...
目次オンデマンドインポート:グローバルインポートオンデマンドインポート:プラグインをインストールする...
問題の説明ご存知のとおり、MySQL でフィールドを昇順に並べ替える SQL は次のとおりです (i...
目次1. 基本2. 問題の説明3. 解決策付録: js を使用して Excel の日付形式を変換する...
目次導入説明書実際の経験長所と短所総括する導入mysqlpump は mysqldump の派生です...
目次1. デジタルオペレーション(1)指定された範囲内で乱数を生成する2. 配列操作(1)配列の順序...
この記事では、mysqld プロセスをシャットダウンするプロセスと、MySQL インスタンスを安全か...
前面に書かれた注文テーブル、アクセス記録テーブル、商品テーブルなど、日常生活でデータベースを操作する...
序文最近、MySQL で RR レベルでデッドロック問題に遭遇しました。興味深いと思ったので、調べて...