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 の違いについての簡単な説明

推薦する

get メソッドによる HTML フォームの値転送の例

google.htmlインターフェースは図の通りですコードは図のとおりです: (比較的シンプルで、入...

docker run 起動パラメータ コマンドを表示する方法 (推奨)

runlike を使用してコンテナの docker run 起動パラメータを表示します。 pipを...

Windows Server のインストール後にワイヤレスとオーディオが機能しない問題を解決する

1. ワイヤレスPowerShell を実行し、次のコマンドを入力します。 install-wind...

MySQL 整合性制約の定義と例のチュートリアル

目次整合性制約整合性制約の定義整合性制約の分類主キー制約単一の主キーと複合主キーの違い主キーフィール...

MySQL 5.7.13 のインストールと設定方法の Mac でのグラフィック チュートリアル

MySQL 5.7.13 Mac用インストールチュートリアル、非常に詳細で、以下のように記録されてい...

MySQLのスリープ関数の特殊現象例の詳しい説明

序文MySQL のスリープ システム機能は、実用的な適用シナリオが少なく、通常は実験的なテストに使用...

momentJs を使用してカウントダウン コンポーネントを作成する (サンプル コード)

今日はvueとmomentで作ったカウントダウンを紹介したいと思います。具体的な内容は以下のとおりで...

MySQL 5.7 のインストールと設定のチュートリアル

この記事では、参考までにMySQLのインストールと設定のチュートリアルを紹介します。具体的な内容は次...

ファイアウォールルールの設定とコマンド(ホワイトリスト設定)の詳しい説明

1. ファイアウォールルールを設定する例1: ポート8080を外部に公開する ファイアウォールコマン...

CSS3 フレックスレイアウトを使用して要素を均等に分散するサンプルコード

この記事では主に、CSS3 フレックスレイアウトを使用して要素を均等に配置する方法を紹介します。自分...

MySQLでテーブル名を変更する方法と注意すべき点

目次1. テーブル名を変更する方法2. 注記要約: 1. テーブル名を変更する方法RENAME TA...

Alibaba Cloud Centos7.3 インストール mysql5.7.18 rpm インストール チュートリアル

MariaDBをアンインストールするCentOS7 ではデフォルトで MySQL の代わりに Mar...

HTTPSの最も優れた説明

皆さんおはようございます。しばらく記事を更新していませんでした。実は、私は流行中に1か月以上家にいて...

div が iframe に覆われるいくつかの状況とその解決策

類似の構造:コードをコピーコードは次のとおりです。 <div></div>&...

MySql データベースにリモートでログインするにはどうすればよいですか?

はじめに: プロジェクトを開発するために、サーバーに MySql データベース サーバーを展開し、ロ...