MySQL 8.0 の非表示列に対する基本操作

MySQL 8.0 の非表示列に対する基本操作

01 非表示の列を作成する

非表示の列を作成するには:

テーブル `t2` を作成します (
  `id` int NOT NULL AUTO_INCREMENT、
  `name` varchar(20) デフォルト NULL,
  `age` int デフォルト NULL 非表示、
  主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=utf8mb4 照合=utf8mb4_0900_ai_ci

ご覧のとおり、SQL でテーブル t2 が作成され、id、name、age などのフィールドが含まれています。このうち、age フィールドには、invisible 属性が設定されています。

もちろん、alter table 構文を使用して非表示の列を作成し、非表示のスコア フィールドを t2 テーブルに追加することもできます。

mysql> テーブル t2 を変更して、スコア int を非表示に追加します。
クエリは正常、影響を受けた行は 0 行 (0.05 秒)
レコード: 0 重複: 0 警告: 0

create table のような構文は、非表示のフィールドと完全に互換性がありますか?答えはイエスです。

mysql> テーブル t1\G の作成を表示します
************************** 1. 行 ****************************
表: t1
テーブルの作成: CREATE TABLE `t1` (
`id` int NOT NULL AUTO_INCREMENT、
`name` varchar(20) デフォルト NULL,
`age` int デフォルト NULL /*!80023 非表示 */,
主キー (`id`)
) エンジン=InnoDB AUTO_INCREMENT=2 デフォルト文字セット=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
セット内の 1 行 (0.00 秒)

mysql> t1 のようなテーブル t3 を作成します。
クエリは正常、影響を受けた行は 0 行 (0.09 秒)

mysql> テーブル t3\G の作成を表示します
************************** 1. 行 ****************************
表: t3
テーブルの作成: CREATE TABLE `t3` (
`id` int NOT NULL AUTO_INCREMENT、
`name` varchar(20) デフォルト NULL,
`age` int デフォルト NULL /*!80023 非表示 */,
主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=utf8mb4 照合=utf8mb4_0900_ai_ci
セット内の 1 行 (0.00 秒)

create table as の構文では、デフォルトでは非表示の列は保持されません。この列を保持する場合は、次の方法を使用します。

02 非表示の列に対する基本操作

t1 という名前のテーブルを作成します。このテーブルには、id、name、age の 3 つのフィールドが含まれています。age フィールドは非表示です。基本的な操作をいくつか見てみましょう。

mysql> t1 に値を挿入します (1,'zhangsan',10);
エラー 1136 (21S01): 列数が行 1 の値数と一致しません

mysql> t1 (id,name,age) に値 (1,'zhangsan',10) を挿入します。
 クエリは正常、1 行が影響を受けました (0.01 秒)

mysql> t1 から * を選択します。
+----+----------+
| ID | 名前 |
+----+----------+
| 1 | 張さん |
+----+----------+
セット内の 1 行 (0.00 秒)

まず、3 つのフィールドを含むテーブル t1 にレコードを挿入します。列の数が一致しないというエラー メッセージが表示されます。

次に、挿入するときに、対応するフィールドを追加し、挿入が正常であることを確認します。

ただし、select * 構文を使用してクエリを実行すると、クエリ結果には id と name の 2 つの列しかないことがわかります。非表示の列 age はデフォルトでは表示されません。

もちろん、select を使用してこの列を明示的に表示することもできます。

mysql> t1 から id、name、age を選択します。
+----+----------+------+
| ID | 名前 | 年齢 |
+----+----------+------+
| 1 | 張さん | 10 |
+----+----------+------+
セット内の 1 行 (0.00 秒)

03 非表示の列メタデータ

information_schema を使用して列が非表示の列であるかどうかを確認するか、desc + table_name コマンドを使用することができます。次のように:

ここで、TABLE_SCHEMA = 'test'、TABLE_NAME = 't1';
+------------+-------------+------------+
| テーブル名 | 列名 | 追加 |
+------------+-------------+------------+
| t1 | 私 | |
| t1 | j | |
| t1 | k | 非表示 |
+------------+-------------+------------+

mysql> desc test.t1;
+-------+-------------+------+-----+---------+----------------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| 名前 | varchar(20) | はい | | NULL | |
| 年齢 | int | はい | | NULL | 非表示 |
+-------+-------------+------+-----+---------+----------------+
セット内の 3 行 (0.00 秒)

04 主キーIDとして使用

次の例を見てください。主キー ID を非表示の列として設定することで、ID 列を気にして非表示にすることなく、テーブルのデータ コンテンツに関連するフィールドに集中できるようになります。

mysql> テストを使用する
テーブル名と列名の補完のためのテーブル情報の読み取り
-Aでこの機能をオフにすると起動が速くなります。

データベースが変更されました
mysql> テーブル t4 を作成します (id int not null auto_increment primary key invisible,name varchar(20),age int );
クエリは正常、影響を受けた行は 0 行 (0.07 秒)

mysql> t4 に値 ('zhangsan'、10)、('lisi'、15) を挿入します。
クエリは正常、2 行が影響を受けました (0.01 秒)
記録: 2 重複: 0 警告: 0

mysql> t4 から * を選択します。
+----------+------+
| 名前 | 年齢 |
+----------+------+
| 張さん | 10 |
| リシ | 15 |
+----------+------+
セット内の 2 行 (0.00 秒)

この方法には大きな利点があります。ビジネス用に設計されたテーブルに主キーがない場合、DBA は間違いなくこのテーブル構造を許可しません。その後、DBA はビジネス ロジックを変更せずに、非表示の列に主キーを設定してこのテーブルの問題を解決できます。

以上がMySQL 8.0の非表示列の基本操作の詳細内容です。MySQL 8.0の非表示列の詳細については、123WORDPRESS.COMの他の関連記事にご注目ください。

以下もご興味があるかもしれません:
  • MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル
  • MySQL 8.0.24 のインストールと設定方法のグラフィックチュートリアル
  • MySQL 8.0.24 リリースノートのいくつかの改善点
  • Java から MySQL 8.0 JDBC に接続するための詳細な手順 (IDEA バージョン)
  • MySQL 8.0 のメモリ消費の詳細な分析
  • MySql8.023 インストール プロセスの詳細なグラフィック説明 (初回インストール)
  • MySQL 8.0 の新機能 - 管理ポートの使用の概要
  • MySQL 8.0 の新機能 - チェック制約の紹介
  • mysql8.0.23 msi インストールの超詳細なチュートリアル
  • MySQL 8.0.23 無料インストールバージョンの設定詳細チュートリアル
  • win10 で mysql8.0.23 をインストールし、「サービスが制御機能に応答しません」という問題を解決する方法

<<:  Web ページ制作におけるテーブル属性 CellPad、CellSpace、Border の説明と使用

>>:  JavaScript の基本オブジェクト

推薦する

固定サイドバーを実現するためのJavaScript

固定サイドバーを実装するにはJavaScriptを使用します。参考までに、具体的な内容は次のとおりで...

Mysql 8.0.18 ハッシュ結合テスト (推奨)

ハッシュ結合ハッシュ結合は実行にインデックスを必要とせず、ほとんどの場合、現在のブロックネストループ...

Docker Machineの詳細な説明

Docker と Docker Machine の違いDocker はクライアント サーバー アーキ...

MySQL 5.7 でルートパスワードを忘れた後に変更する方法の詳細なチュートリアル

序文長い間、MySQL のアプリケーションおよび学習環境は MySQL 5.6 以前のバージョンであ...

CSS フロントエンドの知識ポイントのまとめ(必読)

1. CSS の概念: (カスケーディング スタイル シート)利点: 1. コンテンツとプレゼンテ...

Javascriptのクロージャとアプリケーションの詳細な説明

目次序文1. クロージャとは何ですか? 1.1 クロージャは条件コードを満たす1.2 クロージャ生成...

Linux でバックグラウンドで実行中のプログラムを表示して終了する方法

1. .shファイルを実行する./sh ファイルを使用して直接実行することもできますが、現在のターミ...

Linuxの一般的なコマンドでLinuxのmoreコマンドを使用する方法

more は、最もよく使用されるツールの 1 つです。最も一般的な使用方法は、出力コンテンツを表示し...

Nexus を使用して Docker リポジトリを作成する方法

公式の Docker レジストリを使用して作成されたウェアハウスでは、イメージを削除してもデフォルト...

vue3 で vue-router を使用するための完全な手順

序文ルーティングの管理は、ほとんどのシングルページ アプリケーションにとって不可欠な機能です。 Vu...

Vue のライフサイクルとフック関数

目次1.ライフサイクルとは何か2. Vueのライフサイクル3. ライフサイクルフック関数1.ライフサ...

bashコマンドの使い方の詳細な説明

Linux では、基本的に vi エディタのように「.sh」拡張子を持つテキストの処理と実行を記述す...

vue+iviewのメニューとタブの連携方法

Vue+iview メニューとタブのリンク現在、vue+iview を使用してバックエンド管理システ...

nginx keepaliveの具体的な使い方

http1.1 プロトコルのデフォルトのリクエスト ヘッダーでは、図に示すように、デフォルトで ke...

Vueのdiffアルゴリズムについての簡単な説明

目次概要バーチャルドム原理実装プロセスパッチ方式sameVnode関数patchVnode関数upd...