何人かの学生は、マスターとスレーブの間の不一致の問題に遭遇したと述べました。 一般的な状況としては、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 構成プロセスの分析
要素までスクロールするたびに読み込みアニメーションを追加するにはどうすればよいですか?初期パラメータ...
この記事では、WeChatアプレットがSMS認証コードのカウントダウンを送信するための具体的なコード...
ヘッドと DTD はページには表示されませんが、Web ページの重要な要素です。 なぜ失敗したのでし...
戦争パッケージを準備する1. 既存のSpringBootプロジェクトを準備し、pomに依存関係を追加...
目次COUNT 関数は何をするのですか? MyISAMの「魔法」シンプルなCOUNT最適化近似値を使...
目次リスナー1.ウォッチエフェクト2.見る1.1 聴くための最初の方法1.2 聞く2つ目の方法1.3...
0. 新しい操作: mkdir abc #新しいフォルダを作成 touch abc.sh #新しいフ...
ps コマンドを使用できます。プロセスの PID など、現在実行中のプロセスに関する関連情報を表示で...
Web ページを作成するときに、テーブルの幅が揃っていないという問題に遭遇することがよくあります。 ...
CentOS 8 がリリースされてから随分経ちました。Linux 仮想マシンをいじっている人間として...
<br />言葉は、人間の思考や感情を伝えるために必然的に生み出されるものです。人類の文...
前の記事で説明したフォームの自動入力の問題を解決した後、新しい問題が発生しました。ページの一部のスタ...
目次1. v-on指令1. 基本的な使い方2. 糖衣構文3. イベントパラメータ4. イベント修飾子...
序文場合によっては、第 1 正規形設計パターンに従わないビジネス テーブルに遭遇することがあります。...
1. VMware 15.5から新しい仮想マシンを作成する1. VMware を開き、ホームページで...