何人かの学生は、マスターとスレーブの間の不一致の問題に遭遇したと述べました。 一般的な状況としては、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 構成プロセスの分析
序文MySQL マスター スレーブ レプリケーションの遅延は、業界では長年の問題となっています。遅延...
目次隠れた問題適応高さのソリューションまず解決策を提示してください。Vueスタックが必要な学生はvu...
ステップ1: ディレクトリに入ります: cd /etc/mysql、debian.cnfファイルを表...
1. はじめにプロジェクトではMySQLを使用しています。インターネット上の例を参考にインストール...
記録として、将来使用される可能性があり、困っている友人も使用できます。 BBはもうやめて、まずはレン...
elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...
非常に便利な機能group_concat() について、マニュアルには次のように記載されています: ...
1. es起動コマンド: docker run -itd -e TAKE_FILE_OWNERSHI...
覚えて: IDE ディスク: 最初のディスクは hda、2 番目のディスクは hdb...最初のディ...
LAN 内のマシンは外部ネットワークにアクセスできますが、外部ネットワークは内部ネットワークにアクセ...
目次1. 新しいII. 変更element-ui は、Ele.me のフロントエンド チームが開発者...
序文データベースをバックアップするときは、データベース全体のバックアップを使用します。ただし、何らか...
結果: 実装コード: スワイパーコンポーネントと一緒に使用する必要がありますSwiper 基本デモア...
この記事は主に、MySQL インデックスの長さ制限の原理の分析を紹介します。サンプル コードを通じて...
1. はじめにOracle が MySQL 8.0GA をリリースしました。海外での GA はリリー...