ホームページ  >  記事  >  データベース  >  MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

黄舟
黄舟オリジナル
2017-02-07 13:08:071313ブラウズ

MySQL 5.7 json の紹介の序文

MySQL 5.7 では、Json と Generated という 2 つの新しいフィールド タイプが追加されています。Generated タイプがなければ、Json タイプは強力であり、Json では使用できません。 Json はインデックスをサポートしていないため、Json でデータをクエリする場合、実行効率の観点からは完全なテーブル スキャンになりますが、生成された環境では使用できません。 Generated 型は単なる仮想フィールドであり、値は他のフィールド、またはフィールド間の変換から取得されます。この型は、Generated の特性を使用して間接的にインデックスを作成できます。 Json 型のキーのインデックスを使用すると、Json がインデックスを作成できない問題が解決されます。つまり、Generated 型の生成により、Json 型のインデックス作成の問題がサポートされます。 JSON 値には、単一値、配列、タプル、注釈付き Json 形式などのいくつかの形式が含まれます。

Json型の登場は、客観的には研究開発に利便性をもたらし、NoSQLと同様のサポートを提供しますが、DBAの運用保守の観点から見ると、この問題は大きな問題と一致する可能性があります。はい、実際の運用では json がテキスト フィールドのバリアントになる可能性があります。DBA が今後 5.7 を使用する際にはこのタイプに細心の注意を払うことを願っています。

JSONフィールドを含むテーブルを作成する

JSONフィールドを含むテストテーブルを直接作成する

CREATE TABLE json_test (
  id int(11) NOT NULL AUTO_INCREMENT,
  group_name varchar(20) DEFAULT NULL,
  user_info json DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

またはJSONタイプのフィールドをテーブルに追加する

 ALTER TABLE json_test ADD COLUMN user_info JSON DEFAULT NULL;

データを挿入する

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

JSONフィールド関連のクエリ

1.すべての結果

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

2: JSON_EXTRACT クエリ

JSON_EXTRACT この関数は主に、user_info で age=21 のレコードを検索したり、name='wangwei' または ' %wangwei% のような名前でレコードをクエリしたりするなど、完全一致に使用されます。 'ファジークエリ:

SELECT * FROM json_test WHERE JSON_EXTRACT(user_info,'$.age')=21;

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

値が配列の場合、配列の開始位置の値は 0 です。同時に、MySQL はバージョン 5.5.9 で -> などを追加しました。 JSON_EXTRACT の代替は次のように記述されます:

SELECT * FROM json_test WHERE user_info->"$.age"=21;

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

3. JSON_SEARCH クエリ

JSON_SEARCH 文字列検索関数は、すべての JSON キーのキー値が文字列 'wangwei' であるレコードを検索します。プラス % は、次のような意味です。

SELECT * FROM json_test WHERE JSON_SEARCH(user_info,'all','wangwei') IS NOT NULL;
SELECT * FROM json_test WHERE JSON_SEARCH(user_info,'all','wangwei%') IS NOT NULL;
SELECT * FROM json_test WHERE JSON_SEARCH(user_info,'all','%wangwei%') IS NOT NULL;


4. JSON_CONTAINS は、キーに指定された値が含まれるかどうかを決定します。

JSON_CONTAINS は、キーに指定された値が含まれるかどうかを決定します。含まれておらず、指定されたキーが集中化された状況に存在しません:

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

5. JSON_CONTAINS_PATH は、キーがフィールドに存在するかどうかを決定します。は 0 と 1 で、形式は JSON_CONTAINS_PATH(json_doc , one_or_all, path[, path] ...) です。1 の場合は、パスに 1 つがある限り 1 になり、それ以外の場合は 1 になることを意味します。すべての場合は 0 になり、すべてを含める必要があり、戻り値は 1 になります。それ以外の場合は 0:

6 となるため、通常の状況では Json フィールドの型は空ではなく、クエリ結果は次のようになります。この値は 2 以上である必要があります:

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

8: JSON_TYPE は Json フィールドのキー値のデータ型をクエリします

JSON_TYPE は主に Json フィールドをクエリするために使用されます。表示されるタイプは次のように分類されます:

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)純粋な JSON タイプ:

OBJECT: JSON オブジェクト; ARRAY: JSON 配列; BOOLEAN: JSON の true および false リテラル

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)数値タイプ:

INTEGER: MySQL TINYINT、SMALLINT、MEDIUMINT、INT および BIGINT スカラー;DOUBLE: MySQL DOUBLE FLOAT スカラー;DECIMAL: MySQL DECIMAL および NUMERIC スカラー

時間タイプ:

DATETIME: MySQL DATETIMEおよび TIMESTAMP スカラー。 DATE: MySQL DATE スカラー;TIME: MySQL TIME スカラー


文字列型:

STRING: MySQL utf8 文字型スカラー;CHAR、VARCHAR、TEXT、ENUM、SET


バイナリ型:

BLOB: MySQL バイナリ型スカラー;BINARY、VARBINARY、BLOB;BIT: MySQL BIT スカラー


他のすべてのタイプ:

OPAQUE (生ビット)

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

9. JSON_UNQUOTE は前後の特殊文字を削除します

JSON_UNQUOTE は主に前後の特殊文字を削除し、値をフォーマットするために使用されます。現在、次の文字がサポートされています。 Json 列と生成された列 ((上)、その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) にご注意ください。

MySQL 5.7 の新機能 | Json 列と生成された列 (パート 1)

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。