MySQL 5.7 生成列の使用例の分析

MySQL 5.7 生成列の使用例の分析

この記事では、例を使用して、MySQL 5.7 で生成された列の使用方法を説明します。ご参考までに、詳細は以下の通りです。

生成された列の値は、列定義の式から計算されます。

MySQL 5.7 は、2 種類の生成列をサポートしています。

1. 仮想生成列: 列の値は、テーブルからレコードが読み取られるときに計算されます。データはハードディスク上に保存されません。

2. 保存された生成列: レコードがテーブルに書き込まれると、列の値が計算され、通常の列としてハードディスク上に保存されます。

したがって、仮想では、保存されているよりもストレージ スペースが少なくて済みます。生成された列の型が指定されていない場合、MySQL 5.7 のデフォルトの生成された列の型は仮想です。

生成された列を定義するための構文は次のとおりです。

col_name data_type [GENERATED ALWAYS] AS (式)
 [仮想 | 保存済み] [NULL ではない | NULL]
 [一意の [キー]] [[主] キー]
 [コメント '文字列']

テーブルを作成し、フィールドの 1 つを生成された列として指定します。

CREATE TABLEテスト(
 id INT (11) UNSIGNED NOT NULL AUTO_INCREMENT,
 中国語 DOUBLE NOT NULL デフォルト '0',
 数学 DOUBLE NOT NULL デフォルト '0',
 英語 DOUBLE NOT NULL デフォルト '0',
 total_score DOUBLE AS (中国語 + 数学 + 英語)、
 主キー (id)
)ENGINE=INNODB デフォルト文字セット=utf8mb4;

テーブルにデータを挿入します

テスト(中国語、数学、英語)に値(66、72、54)を挿入します。
テストから*を選択します。

生成された列では値を手動で指定することができず、ERROR 3105 が発生することに注意してください。

total_scoreフィールド名をINSERT文に含める場合は、その値をDEFAULTにのみ設定できます。

テスト(中国語、数学、英語、合計スコア)に値(33、44、55、DEFAULT)を挿入します。

テーブルがすでに存在する場合は、alter table ステートメントを使用して、生成された列を作成、変更、または削除できます。

テーブルテストを変更し、times_score列を追加し、常にdoubleを生成します 
(中国語 * 数学 * 英語) として保存されます。

生成された列のデータ型と式を変更する

テーブルを変更してテストし、times_score列を変更して常に生成されるfloat型変数を生成する 
(中国語 * 数学 * 英語 * 10) として保存されます。

生成された列の名前を変更する

テーブルを変更するテストtimes_scoreを変更するtimes_score_new floatは常に生成される 
(中国語 * 数学 * 英語 * 10) として保存されます。

生成された列を削除する

テーブルテストを変更して、times_score_new 列を削除します。

仮想列を保存済みの生成列に変更することはできません。また、その逆も同様です。最初に削除してから再度追加することしかできません

テーブルテストを変更して列 total_score を削除します。
テーブルテストを変更して列total_scoreを追加し、常にdoubleを生成します 
(中国語+数学+英語)として保存されます。

テーブル内の通常のフィールドは、生成された列を格納するように変更できますが、仮想生成された列を格納するように変更することはできません。

テーブルの変更テスト列の変更中国語のダブルが常に生成される 
(math + 1) として保存されます。

保存された生成列は、生成された値を持つ通常のフィールドに変更できます。

テーブルテストを変更し、列 total_score を double に変更します。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL で行を列に変換したり、列を行に変換したりする詳細な例
  • MYSQLデータベースの既存のテーブルに新しいフィールド(列)を追加する
  • MySQL でクエリ結果にシリアル番号を追加する方法
  • MySQLを使用して列内の同一値の数を照会する方法
  • MySQLを使用して列内の異なる値の数をカウントする例
  • Mysql のデータベースのすべてのテーブル名、列名、データ型メモを返します。
  • MySQL は、テーブルの列や制約などを追加、変更、削除します。
  • 行と列の変換のデータベース実装 (mysql の例)
  • MySQL ストアド プロシージャで動的な行から列への変換を使用する
  • MySQL の列から行への変換、フィールドの結合方法 (必読)
  • MySQLで列の値を列に変換する方法

<<:  Ubuntu 20.04でAliソースを変更する方法

>>:  JSにおけるデータ型の正しい判定方法の例

推薦する

HTML コード作成ガイド

共通コンベンションタグ自己終了タグ。閉じる必要はありません (例: img input br hr ...

Docker 上で Redis クラスターを構築する

目次1. イメージをプルする2. Redisコンテナを作成する3. コンテナを起動するためにクラスタ...

トラフィックの多いウェブサイト向けのソリューション

まず、サーバーのハードウェアが現在のトラフィックをサポートするのに十分かどうかを確認します。通常の ...

解析を実装するためにPostgreSQLデータベースを書き込むSQLスクリプト関数

この記事は主に、PostgreSQL データベースを記述して解析を実装する SQL スクリプト関数を...

CSSスタイルとセレクターの使い方

HTML で CSS を使用する 3 つの方法: 1. インラインスタイル: 要素のスタイル属性を通...

JavaScript オブジェクトを作成する 3 つの方法

目次1. オブジェクトリテラル2. newキーワードはオブジェクトを作成する3. Object.cr...

JavaScript 開発における標準コミットメッセージの重要性の詳細な説明

目次標準コミットメッセージの重要性コミットするコミットリント依存関係をインストールする.commit...

Linux でソースインストールされたパッケージを簡単に削除する方法

ステップ1: Stowをインストールするこの例では CentOS を使用しているため、拡張 EPEL...

MySQL を解凍してインストールおよび完全に削除する方法の詳細なグラフィック説明

1. MySQLをインストールする(1)ダウンロードしたMySQLの圧縮ファイルをMySQLをインス...

UTF8 でエンコードされた Web ページにファイルが含まれている場合の、ページの前の空白行の解決方法

<br />このページはUTF8エンコードを使用しており、ヘッダーとフッターはテンプレー...

モバイル アプリのユーザー インターフェース設計に関する 10 のヒント

ヒント1: 集中力を保つ最高のモバイル アプリは、1 つのことを非常にうまく行うことに重点を置いてい...

中国における中国語ドメイン名の人気は新たなクライマックスを迎えた

<br />外交部などの中央政府機関、各レベルの地方政府、その他の国家機関や部門が率先し...

MySQLデータベースのマスタースレーブレプリケーションと読み取り書き込み分離に関する詳細なチュートリアル

目次序文1. MySQL マスタースレーブレプリケーション1. サポートされているレプリケーションの...

JavaScript でフロントエンドのカウントダウン効果を実装する

この記事では、フロントエンドのカウントダウン効果を実現するためのJavaScriptの具体的なコード...

ファイルの種類を検出するJavaScriptメソッド

目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...