MySQL json 形式のデータクエリ操作

MySQL json 形式のデータクエリ操作

デフォルトのテーブル名はbase_dataで、json列名はjson_valueです。

json_valueの値は

{“ids”:[“a”,“b”],“datas”:[{“name”:“张三”}]}

クエリは次のようになります

base_data から * を選択し、JSON_CONTAINS(json_value -> "$.ids", JSON_ARRAY('a')) を指定します。

または

base_data から * を選択し、JSON_CONTAINS(json_value -> "$.ids[*]", JSON_ARRAY('a')) を満たす必要があります。

どちらも良いですが、具体的な違いはまだ不明です

補足知識: MySQLのvarcharフィールドが長さ制限を超えると自動的に切り捨てられる問題 -----MySQLのsql_modeモードの説明と設定

MySQL sql_modeの適切な設定

sql_mode は見落とされやすい変数です。デフォルト値は null です。この設定では、不正なデータの挿入を許可するなど、不正な操作が許可される可能性があります。実稼働環境では、この値を厳密モードに設定する必要があり、開発およびテストフェーズで問題を検出できるように、開発およびテスト環境のデータベースも設定する必要があります。

SQLモデルは、次のような問題を解決するためによく使用されます。

(1)SQLモードを設定することで、さまざまな厳密さでデータ検証を完了し、データの準備状況を効果的に確保できます。

(2)SQLモデルをルーズモードに設定することで、ほとんどのSQL文が標準SQL構文に準拠していることを保証できます。これにより、異なるデータベース間でアプリケーションを移行するときに、ビジネスSQL文に大きな変更を加える必要がなくなります。

(3)異なるデータベース間でデータを移行する前に、SQLモードを設定すると、MySQL上のデータをターゲットデータベースに簡単に移行できるようになります。

sql_mode の一般的な値は次のとおりです。

ONLY_FULL_GROUP_BY:

GROUP BY 集計操作の場合、SELECT 内の列が GROUP BY に表示されない場合は、列が GROUP BY 句にないため、この SQL は無効です。

ゼロ以外の自動値:

この値は、自動インクリメント列への挿入に影響します。デフォルトでは、0 または NULL を挿入すると、次の自動インクリメント値が生成されます。このオプションは、ユーザーが値 0 を挿入し、列が自動増分されている場合に便利です。

STRICT_TRANS_TABLES:

このモードでは、トランザクション テーブルに値を挿入できない場合、現在の操作が中断され、非トランザクション テーブルには制限が課されません。

日付にゼロがない:

厳密モードでは、日と月の値がゼロになることはできません。

日付なし:

この値を設定すると、MySQL データベースはゼロ日付の挿入を許可しなくなり、ゼロ日付を挿入すると警告ではなくエラーがスローされます。

ゼロ除算エラー:

INSERT または UPDATE 中にデータがゼロで除算されると、警告ではなくエラーが生成されます。このモードが指定されていない場合、値がゼロで除算されると、MySQL は NULL を返します。

自動作成ユーザーなし:

GRANT が空のパスワードを持つユーザーを作成しないようにする

エンジン代替なし:

必要なストレージ エンジンが無効になっているか、コンパイルされていない場合は、エラーがスローされます。この値が設定されていない場合は、代わりにデフォルトのストレージ エンジンが使用され、例外がスローされます。

パイプAS_CONCAT:

「||」を OR 演算子ではなく文字列連結演算子として扱います。これは Oracle データベースと同じであり、文字列連結関数 Concat に似ています。

ANSI_QUOTES:

ANSI_QUOTES が有効になっている場合、二重引用符は識別子として解釈されるため、文字列を引用符で囲むことはできません。

ORACLE の sql_mode 設定は次のものと同等です。

PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER。

MySQL を使用する場合、Oracle を使用するという全員の習慣を引き続き維持するために、MySQL の sql_mode を次のように設定できます。

my.cnfに次の設定を追加します

[mysqld]

sql_mode = 'ONLY_FULL_GROUP_BY、NO_AUTO_VALUE_ON_ZERO、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、

ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、PIPES_AS_CONCAT、ANSI_QUOTES'

知らせ:

MySQL 5.6 と MySQL 5.7 のデフォルトの sql_mode パラメータは異なります。5.6 のモードは NO_ENGINE_SUBSTITUTION で、これは実際には null 値を表し、モード設定がないことに相当し、緩いモードとして理解できます。 5.7 のモードは STRICT_TRANS_TABLES で、厳密モードです。

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :データの検証に加えて、学習するにつれて、MySQL がプログラムで行う多くのことをカバーする、さらに多くのことを実行できることが分かります。

厳密モードに切り替えた後に発生する可能性のある問題:

設定モードに NO_ZERO_DATE が含まれている場合、MySQL データベースはゼロ日付の挿入を許可せず、ゼロ日付を挿入すると警告ではなくエラーがスローされます。たとえば、テーブル内の TIMESTAMP 列 (NULL として宣言されていない場合、または DEFAULT 句が指定されていない場合) には、自動的に DEFAULT '0000-00-00 00:00:00' (ゼロ タイムスタンプ) が割り当てられます。また、このテストのテーブル内の日付列には、デフォルトでゼロ日付 '0000-00-00' COMMENT 'date' を挿入できます。これらは明らかに sql_mode の NO_ZERO_DATE を満たさず、エラーを報告します。

モードの設定と変更(上記の問題を解決する例):

方法1:

まず、select @@sql_modeを実行し、クエリされた値をコピーしてNO_ZERO_IN_DATEとNO_ZERO_DATEを削除し、set sql_mode = 'modified value'またはset session sql_mode = 'modified value';を実行します。たとえば、set session sql_mode = 'STRICT_TRANS_TABLES';を実行して、厳密モードに変更します。

このメソッドは現在のセッションでのみ有効であり、現在のセッションが閉じられている場合は有効になりません。

方法2:

まず select @@global.sql_mode を実行し、クエリされた値をコピーして NO_ZERO_IN_DATE と NO_ZERO_DATE を削除し、次に set global sql_mode = 'modified value' を実行します。

この方法は現在のサービスでは有効であり、MySQL サービスを再起動すると無効になります。

方法3: MySQLインストールディレクトリ、またはmy.cnfファイル(Windowsの場合はmy.iniファイル)に以下を追加します。

sql_mode = ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION、

次のようにmy.cnfを追加します。

[mysqld]

sql_mode=ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER

次に、mysql を再起動します。

この方法は永続的に有効です。もちろん、本番環境では MySQL サービスの再起動は禁止されているため、方法 2 と方法 3 を組み合わせてオンラインの問題を解決します。そうすれば、ある日本当に MySQL サービスが再起動されたとしても、永続的に有効になります。

上記のMySQL json形式のデータクエリ操作は、エディターがあなたと共有するすべてのコンテンツです。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLとPHPの基礎と応用: データクエリ
  • MySQLデータクエリが多すぎるとOOMが発生するかどうかについての簡単な議論
  • MySQLデータベースの数千万件のデータクエリとストレージの詳細な説明
  • MySQL 集計統計データの低速クエリの最適化
  • MySQL ビッグデータ クエリ最適化エクスペリエンスの共有 (推奨)
  • MySQL と PHP の基礎と応用: データクエリステートメント

<<:  docker runコンテナの自動終了の解決策

>>:  HTML における src と href の違いについての簡単な説明

推薦する

フロントエンド開発一般マニュアル(ツール、Webサイト、経験などを含む)

今日は何もすることがなかったので、いくつかのツール(オンラインとクライアント)、よく使用する URL...

MySQL 5.7.18 リリース インストール ガイド (bin ファイル バージョンを含む)

インストール プロセスは、コンパイル手順を除いて、基本的にソース バージョンと同じです。この記事では...

mysql5.7.17.msi インストール グラフィック チュートリアル

mysql-5.7.17.msiのインストール、スクリーンショットに従ってください、ステップバイステ...

スネークゲームを作るための Pygame コード

目次使用されるPygame関数スクリーンの作成ヘビの作成ヘビを動かすゲームオーバーの処理食事を増やす...

VMware Workstation Pro 16 ライセンス キーと使用方法のチュートリアル

VMware Workstation は、開発、テスト、デモンストレーション、展開のために仮想マシン...

クロスブラウザの問題に対する 5 つの解決策 (要約)

簡単なレビュー: ブラウザの互換性の問題は、しばしば頭痛の種となります。ここでは、これらの問題を回避...

Docker rocketmq デプロイメントの実装例

目次準備展開プロセスRocketMQ の初体験関連する質問ヘルプドキュメント私は最近 RocketM...

VMware 仮想マシンの 3 つのネットワーク方式と原則 (概要)

1. ブリッジ: デフォルトでは VMnet0 が使用されます1. 原則:ブリッジは、それぞれ 2...

CentOS 7.5 が Varnish キャッシュサーバー機能を導入

1. ワニスの紹介Varnish は、高性能なオープンソースのリバースプロキシサーバーおよび HTT...

docker+jenkins+node.js の自動デプロイメント環境をゼロから構築する方法

このケースはCentOS 7システムに基づいていますDockerの使用経験がある人に適していますLi...

HTML の相対パスと絶対パスの違いの分析

HTML 初心者は、ファイルを正しく参照する方法という問題によく遭遇します。たとえば、HTML ペー...

MySQL の基本: グループ化関数、集計関数、グループ化クエリの詳細な説明

目次1. 使い方が簡単2. DISTINCTを使用して重複を削除する3. COUNT()の詳細な紹介...

Docker を使用して pypi プライベート リポジトリを構築する方法

1. 建設1. htpasswd.txtファイルを準備するファイルには、パッケージを倉庫にアップロー...

iframe を使用して Web ページに他の Web ページを埋め込む方法

iframe の使い方:コードをコピーコードは次のとおりです。 <DIV align=cent...

Tomcat が非同期サーブレットを実装する方法の詳細な説明

序文これまでの Tomcat シリーズの記事を通じて、私のブログを読んでいる学生は Tomcat に...