MySQL で JSON タイプのフィールドを使用する方法
テスト環境: MySQL8.0.19
準備
CREATE TABLE json_demo ( `id` INT ( 11 ) NOT NULL PRIMARY KEY, `content` json NOT NULL ); INSERT INTO json_demo ( id, content ) VALUES /*这条是数组*/ ( 1, '[{"key": 1, "order": 1, "value": "34252"},{"key": 2, "order": 2, "value": "23423"}]' ), /*这条是数组*/ ( 2, '[{"key": 4, "order": 4, "value": "234"},{"key": 5, "order": 5, "value": "234324523"}]' ), /*这条是对象*/ ( 3, '{"key": 3, "order": 3, "value": "43242"}' ), /*这条是对象*/ ( 4, '{"key": 6, "order": 6, "value": "5423"}' );
JSONオブジェクトの基本操作
指定したフィールド値をクエリする
/* 基础查询 */ SELECT content -> '$.key' AS 'key', JSON_EXTRACT(content, '$.key') AS 'key2', content -> '$.value' AS 'value', JSON_EXTRACT(content, '$.value') AS 'value2', content ->> '$.value' AS 'value3', JSON_UNQUOTE(JSON_EXTRACT(content, '$.value')) AS 'value4' FROM json_demo WHERE id > 2;
TIPS:
- ##-> および ->> は MySQL によって設計された構文ですのうち、-> は MySQL5.7 でサポートされ、->> は MySQL8.0 でサポートされます。
- -> JSON_EXTRACT() と同等で、クエリ フィールドが文字列の場合、戻り値にも "" が含まれます。
- ->> JSON_UNQUOTE(JSON_EXTRACT()) と同等で、クエリ フィールドが文字列の場合、戻り値には "" が含まれません。
条件付きクエリに使用されます
content -> '$.key' はフィールドと見なすことができ、実行できる操作は次のとおりです。フィールド上で行われることは基本的に彼が行うことができます。SELECT id, content -> '$.key' AS 'key', content ->> '$.value' AS 'value3' FROM json_demo WHERE id > 2 AND content -> '$.key' > 1 AND content -> '$.value' like '%2%';
/* 修改 */ UPDATE json_demo SET content = JSON_REPLACE( content, /* 将content.key值 + 1 */ '$.key', content -> '$.key' + 1, /* 将content.value值后拼接'abc' */ '$.value', concat(content ->> '$.value', 'abc') ) WHERE id = 3; /* JSON_SET也可以 */ UPDATE json_demo SET content = JSON_SET( content, /* 将content.key值 + 1 */ '$.key', content -> '$.key' + 1, /* 将content.value值后拼接'abc' */ '$.value', concat(content ->> '$.value', 'abc') ) WHERE id = 3; /* 查询修改结果 */ SELECT id,content,content -> '$.key' AS 'key',content ->> '$.value' AS 'value3' FROM json_demo WHERE id = 3; /* 重新赋值 */ UPDATE json_demo SET content = JSON_REPLACE(content,'$.key',3,'$.value','43242') WHERE id = 3;
TIPS:
- JSON_REPLACE と JSON_SET は両方とも、特定のフィールドの値を変更するために使用できます。違いは、JSON_REPLACE が存在しない属性を置き換える場合、操作は無効になるのに対し、JSON_SET は存在しない属性を挿入することです。 。
- つまり、JSON_INSERT と同様に、JSON_SET を使用して属性を追加することもできます。違いは、既存の属性が挿入されると JSON_INSERT 操作が失敗するのに対し、JSON_SET はそれを置き換えることです。
UPDATE json_demo
SET content = JSON_INSERT(content, '$.key', 234)
WHERE id = 3;
SELECT id,content,content -> '$.key' AS 'key' FROM json_demo WHERE id = 3;
UPDATE json_demo
SET content = JSON_INSERT(content, '$.temp', 234)
WHERE id = 3;
SELECT id,content,content -> '$.key' AS 'key' FROM json_demo WHERE id = 3;
UPDATE json_demo
SET content = JSON_SET(content, '$.temp2', 432)
WHERE id = 3;
SELECT id,content,content -> '$.key' AS 'key' FROM json_demo WHERE id = 3;
##JSON 配列操作
クエリ仕様フィールドvalue
SELECT id, content -> '$[*].key' AS 'key', content ->> '$[*].value' AS 'value', content -> '$[0].key' AS 'key2', content ->> '$[0].value' AS 'value2', /* 查询数组长度 */ JSON_LENGTH(content) AS 'length' FROM json_demo WHERE id < 3;
は条件付きクエリに使用されます
SELECT id, content -> '$[*].key' AS 'key', content ->> '$[*].value' AS 'value' FROM json_demo WHERE id < 3 /* content.value的值中存在like'%34%'的值 */ AND content ->> '$[*].value' like '%34%' /* content.key的值中有4 */ AND JSON_OVERLAPS(content ->> '$[*].key', '4' );
指定されたフィールド値を変更します。
基本的な操作は JSON オブジェクトとあまり変わりません。つまり、対応するインデックス ビット '$[0]' を '$' の後に追加し、すべての '$ を指定します。 [*]」。配列に配列が含まれている場合は、「$[1][2][3]」を通じて深い配列要素を指定できます。
要素の追加
JSON_ARRAY_APPEND と JSON_ARRAY_INSERT の両方で配列要素を追加できます。違いは、JSON_ARRAY_APPEND ではインデックス ビットを指定する必要がなく、その場合は最後の位置に追加されますが、JSON_ARRAY_INSERT ではインデックス ビットを指定する必要があり、指定しない場合はエラーが報告されます。
JSON_ARRAY_APPEND は指定されたインデックス ビットの後に追加され、JSON_ARRAY_INSERT は指定されたインデックス ビットの前に挿入されます。その他の操作
名前 | 説明 |
---|---|
JSON_ARRAY() | JSON 配列の作成 |
##JSON ドキュメントへのデータの追加 | JSON_ARRAY_INSERT( ) |
JSON_CONTAINS() | |
JSON_CONTAINS_PATH() | |
JSON_DEPTH() | |
JSON_EXTRACT() | |
JSON_INSERT() | |
JSON_KEYS() | |
JSON_LENGTH() | |
JSON_MERGE() (非推奨) | |
#JSON_MERGE_PATCH() | |
JSON_MERGE_PRESERVE() | |
JSON_OBJECT() | |
JSON_OVERLAPS() (8.0.17 で導入) | |
JSON_PRETTY() | |
##JSON_QUOTE() | 参照 JSON ドキュメント |
JSON_REMOVE() | JSON ドキュメントからデータを削除 |
JSON_REPLACE() | ## JSON ドキュメント内の値を置換 |
JSON_SCHEMA_VALID() (8.0.17 で導入) | JSON スキーマに対して JSON ドキュメントを検証します。ドキュメントがスキーマの場合は TRUE/1 を返し、それ以外の場合は FALSE/0 を返します。 |
JSON_SCHEMA_VALIDATION_REPORT() (8.0.17 で導入) | JSON スキーマに対して JSON ドキュメントを検証し、成功を含む検証結果に関するレポートを JSON 形式で返します。または失敗と失敗理由 |
JSON_SEARCH() | JSON ドキュメント内の値のパス |
#JSON_SET() | JSON ドキュメントにデータが挿入されます |
JSON_STORAGE_FREE() | 部分更新後の JSON 列値のバイナリ表現の空き領域 |
JSON_STORAGE_SIZE() | JSON ドキュメントのバイナリ表現を保存するために使用されるスペース |
JSON_TABLE() | 戻り値のデータリレーショナル テーブルとしての JSON 式から |
#JSON_TYPE() | JSON 値の型 |
JSON_UNQUOTE() | JSON 値の逆参照 |
JSON_VALID() | JSON 値が有効かどうか |
#JSON_VALUE() (8.0 で導入) .21) | 指定されたパスが指す場所にある JSON ドキュメントから値を抽出し、この値を VARCHAR (512) または指定された型 |
として返します。 MEMBER OF() (8.0.17 導入) | 最初のオペランドが 2 番目のオペランドとして渡された JSON 配列の要素と一致する場合は true (1) を返し、それ以外の場合は false (0) を返します |
以上がMySQL で JSON タイプのフィールドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

データ統合の簡素化:AmazonrdsmysqlとRedshiftのゼロETL統合効率的なデータ統合は、データ駆動型組織の中心にあります。従来のETL(抽出、変換、負荷)プロセスは、特にデータベース(AmazonrdsmysQlなど)をデータウェアハウス(Redshiftなど)と統合する場合、複雑で時間がかかります。ただし、AWSは、この状況を完全に変えたゼロETL統合ソリューションを提供し、RDSMYSQLからRedshiftへのデータ移行のための簡略化されたほぼリアルタイムソリューションを提供します。この記事では、RDSMysQl Zero ETLのRedshiftとの統合に飛び込み、それがどのように機能するか、それがデータエンジニアと開発者にもたらす利点を説明します。

MySQLのユーザー名とパスワードを入力するには:1。ユーザー名とパスワードを決定します。 2。データベースに接続します。 3.ユーザー名とパスワードを使用して、クエリとコマンドを実行します。

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

1.正しいインデックスを使用して、データの量を削減してデータ検索をスピードアップしました。テーブルの列を複数回検索する場合は、その列のインデックスを作成します。あなたまたはあなたのアプリが基準に従って複数の列からのデータが必要な場合、複合インデックス2を作成します2。選択した列のみを避けます。必要な列のすべてを選択すると、より多くのサーバーメモリを使用する場合にのみサーバーが遅くなり、たとえばテーブルにはcreated_atやupdated_atやupdated_atなどの列が含まれます。

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

データベース酸属性の詳細な説明酸属性は、データベーストランザクションの信頼性と一貫性を確保するための一連のルールです。データベースシステムがトランザクションを処理する方法を定義し、システムのクラッシュ、停電、または複数のユーザーの同時アクセスの場合でも、データの整合性と精度を確保します。酸属性の概要原子性:トランザクションは不可分な単位と見なされます。どの部分も失敗し、トランザクション全体がロールバックされ、データベースは変更を保持しません。たとえば、銀行の譲渡が1つのアカウントから控除されているが別のアカウントに増加しない場合、操作全体が取り消されます。 TRANSACTION; updateaccountssetbalance = balance-100wh

次のコマンドでmysqlデータベースを表示します。サーバーに接続します:mysql -u username -pパスワードrun showデータベース。すべての既存のデータベースを取得するコマンド[データベース]を選択します。データベース名を使用します。テーブルを表示:表を表示します。テーブル構造を表示:テーブル名を説明してください。データを表示:[テーブル名]から[ *]を選択します。
