序文MySQL バージョン 8.0.23 では、新しい機能「Invisible Column (Invisible Field)」が追加されました。この記事では、MySQL の隠しフィールドの概念と具体的な実装について説明します。 基本概念隠しフィールドはクエリ内で明示的に参照する必要があります。そうしないと、クエリには表示されません。 MySQL 8.0.23 では、隠しフィールドのサポートが開始されました。それ以前は、すべてのフィールドは表示フィールドでした。 次のアプリケーション シナリオを検討してください。アプリケーションが SELECT * ステートメントを使用してテーブルにアクセスし、クエリを続行する必要がある場合、アプリケーションが必要としない新しいフィールドをテーブルに追加しても、アプリケーションは正常に動作する必要があります。 SELECT * クエリの場合、アスタリスク (*) は非表示フィールドを除くテーブル内のすべてのフィールドを表すため、新しく追加されたフィールドを非表示フィールドとして定義できます。隠しフィールドは SELECT * クエリには表示されないため、アプリケーションは引き続き実行されます。アプリケーションの新しいバージョンでこのフィールドを使用する必要がある場合は、クエリで明示的に指定できます。 PS: SELECT * ステートメントを使用してデータをクエリすることは推奨されません。返される必要のあるフィールドを明確に指定する必要があります。 隠しフィールドと DDL ステートメントデフォルトでは、作成されたフィールドは表示可能なフィールドです。列の可視性を明示的に指定する場合は、CREATE TABLE または ALTER TABLE ステートメントの列定義に VISIBLE または INVISIBLE キーワードを指定できます。例えば: テーブルt1を作成します( 私はINT、 j 日付は非表示 )エンジン = InnoDB; ALTER TABLE t1 に列 k INT INVISIBLE を追加します。 フィールドの可視性を変更する場合は、VISIBLE または INVISIBLE キーワードを使用することもできます。例えば: ALTER TABLE t1 CHANGE COLUMN jj DATE VISIBLE; ALTER TABLE t1 MODIFY COLUMN j DATE INVISIBLE; テーブル t1 を変更して列 j を VISIBLE に設定します。 隠しフィールドを使用する場合は、次の点に注意してください。
CREATE TABLE ... LIKE ステートメントを使用してテーブル構造をコピーすると、元のテーブルの隠しフィールドがコピーされ、新しいテーブルでも隠しフィールドとして残ります。 CREATE TABLE ... SELECT ステートメントを使用してテーブルをコピーする場合、明示的に指定しない限り、非表示の列は含まれません。ただし、元のテーブルに非表示のフィールドを含めた場合でも、それらのフィールドは新しいテーブルで表示されます。例えば: mysql> テーブル t1 を作成します (col1 は INT、col2 は INT INVISIBLE)。 mysql> CREATE TABLE t2 AS SELECT col1, col2 FROM t1; mysql> SHOW CREATE TABLE t2_G ************************** 1. 行 **************************** 表: t2 テーブルの作成: CREATE TABLE `t2` ( `col1` int デフォルト NULL, `col2` int デフォルト NULL ) エンジン=InnoDB デフォルト文字セット=utf8mb4 照合=utf8mb4_0900_ai_ci これらの列の非表示属性を保持する場合は、CREATE TABLE の後にそれらの列の非表示属性を指定できます。例えば: mysql> テーブル t1 を作成します (col1 は INT、col2 は INT INVISIBLE)。 mysql> CREATE TABLE t2 (col2 INT INVISIBLE) AS SELECT col1, col2 FROM t1; mysql> SHOW CREATE TABLE t2_G ************************** 1. 行 **************************** 表: t2 テーブルの作成: CREATE TABLE `t2` ( `col1` int デフォルト NULL, `col2` int デフォルト NULL /*!80023 非表示 */ ) エンジン=InnoDB デフォルト文字セット=utf8mb4 照合=utf8mb4_0900_ai_ci ビューは隠しフィールドを参照できますが、定義で明示的に指定する必要があります。ビューが定義された後にフィールドの可視性を変更しても、ビューには影響しません。 隠しフィールドとDMLステートメントSELECT ステートメントの場合、クエリ リストで明示的に指定されていない限り、非表示フィールドはクエリ構造に含まれません。クエリ リスト内の * および tbl_name.* には隠しフィールドは含まれません。自然結合には隠しフィールドは含まれません。 次の文について: mysql> テーブル t1 を作成します (col1 は INT、col2 は INT INVISIBLE)。 mysql> t1 (col1, col2) に値 (1, 2), (3, 4) を挿入します。 mysql> t1 から * を選択; +------+ | 列1 | +------+ | 1 | | 3 | +------+ mysql> t1 から col1、col2 を選択します。 +------+------+ | 列1 | 列2 | +------+------+ | 1 | 2 | | 3 | 4 | +------+------+ 最初の SELECT ステートメントは隠しフィールド col2 を参照しません (* 隠しフィールドは除外されます)。そのため、クエリ結果に col2 フィールドは返されません。 2 番目の SELECT ステートメントは col2 フィールドを明示的に指定するため、そのフィールドがクエリ結果に返されます。 クエリ ステートメントの場合、非表示フィールドにデータが指定されていない場合は、暗黙のデフォルト値ルールを使用して値が割り当てられます。 INSERT 文(REPLACE 文によるデータ挿入を含む)の場合、フィールド リストが指定されていない場合、空のリストが指定されている場合、またはフィールド リストに隠しフィールドが指定されていない場合は、暗黙のデフォルト値が割り当てられます。例えば: テーブル t1 を作成します (col1 INT、col2 INT INVISIBLE)。 t1 VALUES(...) に挿入します。 t1() に値を挿入します(...); t1 (col1) に値を挿入します(...); 最初の 2 つの INSERT ステートメントでは、VALUES() リストで各表示フィールドと非表示フィールドに値を指定する必要があります。 3 番目の INSERT ステートメントでは、VALUES() リストで指定された各フィールドに値を指定する必要があります。 LOAD DATA および LOAD XML ステートメントでは、フィールド リストが指定されていない場合、またはフィールド リストに非表示フィールドが指定されていない場合は、暗黙のデフォルト値が使用されます。入力データには隠しフィールドの値を含めることはできません。 上記のステートメントにデフォルト以外の値を指定する場合は、フィールド リストで非表示フィールドを明示的に指定し、VALUES() リストで値を指定できます。 INSERT INTO ... SELECT * および REPLACE INTO ... SELECT * には、* が隠しフィールドを返さないため、隠しフィールドは含まれません。暗黙のデフォルト値ルールも割り当てに使用されます。 PRIMARY KEY または UNIQUE インデックスに基づいてデータを挿入または無視、置換、または変更するステートメントでは、MySQL は非表示フィールドを表示フィールドと同じように扱います。非表示フィールドはキー値の比較にも使用されます。具体的には、新しい行の一意のキー フィールド値が既存の行と同じ場合、インデックス フィールドが表示されているかどうかに関係なく、次の処理が使用されます。
UPDATE ステートメントを使用して非表示フィールドを更新する場合は、表示フィールドと同様に、明示的に値を割り当てることができます。 フィールドに関するメタデータを非表示にするINFORMATION_SCHEMA.COLUMNS システム テーブルの EXTRA フィールドまたは SHOW COLUMNS コマンドを使用して、フィールドの表示プロパティを表示できます。例えば: mysql> テーブル名、列名、追加項目を選択します INFORMATION_SCHEMA.COLUMNS から ここで、TABLE_SCHEMA = 'test'、TABLE_NAME = 't1'; +------------+-------------+------------+ | テーブル名 | 列名 | 追加 | +------------+-------------+------------+ | t1 | 私 | | | t1 | j | | | t1 | k | 非表示 | +------------+-------------+------------+ デフォルトではフィールドは表示されます。その場合、EXTRA フィールドは空になります。隠しフィールドの場合、EXTRA は明示的に INVISIBLE になります。 SHOW CREATE TABLE コマンドは、テーブル内の非表示の列を表示できます。列定義には、INVISIBLE キーワードを含むバージョンベースのコメントが含まれています。 mysql> SHOW CREATE TABLE t1_G ************************** 1. 行 **************************** 表: t1 テーブルの作成: CREATE TABLE `t1` ( `i` int デフォルト NULL、 `j` int デフォルト NULL, `k` int デフォルト NULL /*!80023 非表示 */ ) エンジン=InnoDB デフォルト文字セット=utf8mb4 照合=utf8mb4_0900_ai_ci mysqldump と mysqlpump は SHOW CREATE TABLE コマンドを使用するため、エクスポートされるテーブル定義には非表示可能なフィールドが含まれます。また、エクスポートされたデータには隠しフィールドの値も含まれます。エクスポート ファイルが、隠しフィールドをサポートしていない古いバージョンの MySQL にロードされた場合、バージョン ベースのコメント情報は無視され、隠しフィールドが表示フィールドとして使用されます。 隠しフィールドとバイナリログバイナリ ログ内のイベントの場合、MySQL は隠しフィールドを次のように処理します。
要約するこれで、MySQL 8.0 の新機能である隠しフィールドに関するこの記事は終了です。MySQL 8.0 の隠しフィールドの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: ウェブページの HTML コード: スクロールテキストの作成
序文アプリケーションを Docker コンテナとしてサーバーにデプロイする場合、通常はネットワークと...
I. 概要HTML テンプレートを作成するときに、テキスト レイアウトの手段としてスペースが使用さ...
シングルノードデータベースの欠点大規模なインターネットプログラムはユーザーベースが大きいため、アーキ...
Robots.txt はプレーンテキスト ファイルであり、Web サイト管理者は、ロボットによるアク...
テーブル ヘッダーでは、明るい境界線の色を個別に定義できます。基本的な構文<TH ボーダーカラ...
目次1. 概要2. オブジェクト作成のパラメータ3. 監視例4. 使用方法5. ソースコード1. 概...
目次1. HTTP範囲リクエスト1.1 範囲構文2. 大きなファイルをダウンロードする方法2.1 補...
https をサポートしていない Web サイトは、ブラウザによって徐々に安全でないとマークされるた...
以下のコードはすべて <head>...</head> の間にあり、具体的な...
導入: MySQL データベースの仕様に関しては、皆さんも何らかのドキュメントを読んだことがあると思...
フォームは、get と post の 2 つのデータ転送方法を提供します。どちらもデータを送信する方...
目次序文: Ubuntu 18.04 は apt ソースを Alibaba Cloud ソースに変更...
文字列を配列に分割するには、次の 3 つの MySQL 関数を使用する必要があります。 REVERS...
データベーストランザクション分離レベルデータベース トランザクションには、低から高まで 4 つの分離...
Linux ホスト名変更コマンド1. ホスト名を一時的に変更するだけの場合は、hostname コマ...