何人かの学生は、マスターとスレーブの間の不一致の問題に遭遇したと述べました。 一般的な状況としては、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 構成プロセスの分析
Alibaba Cloud Server を使用している場合は、セキュリティ グループ設定でポート ...
目次1. ソースコード1.1 モノレポ1.2 タイプスクリプト2. パフォーマンス2.1 ソースコー...
1. IDEAの下にあるターミナルをクリックし、mvn clean installと入力します。 次...
この記事の例では、WeChatアプレットで複数行のテキストスクロールを実装するための具体的なコードを...
序文: MySQL では、システムが多くの文字セットをサポートしており、異なる文字セット間にはわずか...
目次実際のプロジェクトで遭遇する要件実装が間違っているところもある私は個人的に、実装するより良い方法...
1. ul タグには、Mozilla ではデフォルトでパディング値がありますが、IE ではマージン値...
Windows と Linux 間でファイルを転送する場合は、Xftp ツールを使用できます。この...
今日は、マスタースレーブ遅延が発生する理由とその対処方法について説明します。しっかり座って出発の準備...
目次1. はじめに2. フィルター() 3. マップ() 4. ソート() 5. 減らす() 6. ...
序文この記事では、主にWeb開発のためのクロスドメインソリューションを紹介し、参考と学習のために共有...
ブラウザの問題かもしれないと思うかもしれませんが、スタイル定義の順序が間違っている可能性が高いです。...
1. Oracle をインストールします。インターネット上には Oracle のインストール手順が多...
一つの環境CentOS 7にVMware Toolsをインストールしてホストの共有フォルダへのアクセ...
設定ファイルに直接 サーバー{ listen 80 default; # IPへの直接アクセスを禁止...