L'utilisation du type de données JSON dans MySQL (2) - définir les colonnes de données de type JSON
Depuis la version 5.7.8 de MySQL, MySQL prend en charge le type de données JSON. MySQL stocke les documents JSON dans un format interne, permettant un accès en lecture rapide aux éléments du document.
MySQL définit la syntaxe du type de données JSON comme suit:
CREATE TABLE table_name (
...
json_column_name JSON,
...
);
1. Créez une table contenant des colonnes de type JSON
Créez une table d'étudiants, la commande est la suivante:
create table student(
id int primary key,
name char(20),
birth datetime,
contact json
);
2. Insérez des données
insert into student values(20190201,'ZhangTao','1999-1-20','{"phone":"15937320588","QQ":"2589781425","wechart":"15937320588"}');
insert into student values(20190202,'LiPengfei','1998-10-25','{"phone":"13903730582","QQ":"2589781466","wechart":"13903730582"}');
insert into student values(20190203,'LiuFei','1999-11-2','{"phone":"13072615888","QQ":"1789781433","wechart":"wa159373"}');
insert into student values(20190204,'ZhangTao','2000-8-6','{"phone":"15037334666","QQ":"1889781467","wechart":"pa2568988"}');
insert into student values(20190205,'ZhouPeng','2000-6-19','{"phone":"15346382599","QQ":"6689781444","wechart":"ww26779821"}');
3. Afficher toutes les données
mysql> select * from student;
+----------+-----------+---------------------+------------------------------------------------------------------------+
| id | name | birth | contact |
+----------+-----------+---------------------+------------------------------------------------------------------------+
| 20190201 | ZhangTao | 1999-01-20 00:00:00 | {
"QQ": "2589781425", "phone": "15937320588", "wechart": "15937320588"} |
| 20190202 | LiPengfei | 1998-10-25 00:00:00 | {
"QQ": "2589781466", "phone": "13903730582", "wechart": "13903730582"} |
| 20190203 | LiuFei | 1999-11-02 00:00:00 | {
"QQ": "1789781433", "phone": "13072615888", "wechart": "wa159373"} |
| 20190204 | ZhangTao | 2000-08-06 00:00:00 | {
"QQ": "1889781467", "phone": "15037334666", "wechart": "pa2568988"} |
| 20190205 | ZhouPeng | 2000-06-19 00:00:00 | {
"QQ": "6689781444", "phone": "15346382599", "wechart": "ww26779821"} |
+----------+-----------+---------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)
4. Vérifiez le téléphone
Pour récupérer les valeurs d'une colonne JSON, vous pouvez utiliser l'opérateur de chemin JSON (->) ou (- >>).
mysql> select id,name,birth,contact -> '$.phone' phone from student;
+----------+-----------+---------------------+---------------+
| id | name | birth | phone |
+----------+-----------+---------------------+---------------+
| 20190201 | ZhangTao | 1999-01-20 00:00:00 | "15937320588" |
| 20190202 | LiPengfei | 1998-10-25 00:00:00 | "13903730582" |
| 20190203 | LiuFei | 1999-11-02 00:00:00 | "13072615888" |
| 20190204 | ZhangTao | 2000-08-06 00:00:00 | "15037334666" |
| 20190205 | ZhouPeng | 2000-06-19 00:00:00 | "15346382599" |
+----------+-----------+---------------------+---------------+
5 rows in set (0.00 sec)
Si vous souhaitez annuler les guillemets autour du téléphone, vous pouvez utiliser la commande suivante:
mysql> select id,name,birth,contact ->> '$.phone' phone from student;
+----------+-----------+---------------------+-------------+
| id | name | birth | phone |
+----------+-----------+---------------------+-------------+
| 20190201 | ZhangTao | 1999-01-20 00:00:00 | 15937320588 |
| 20190202 | LiPengfei | 1998-10-25 00:00:00 | 13903730582 |
| 20190203 | LiuFei | 1999-11-02 00:00:00 | 13072615888 |
| 20190204 | ZhangTao | 2000-08-06 00:00:00 | 15037334666 |
| 20190205 | ZhouPeng | 2000-06-19 00:00:00 | 15346382599 |
+----------+-----------+---------------------+-------------+
5 rows in set (0.00 sec)
5. Vérifiez les élèves dont le numéro QQ commence par "25"
mysql> select id,name,contact from student where contact ->> '$.QQ' like '25%';
+----------+-----------+------------------------------------------------------------------------+
| id | name | contact |
+----------+-----------+------------------------------------------------------------------------+
| 20190201 | ZhangTao | {
"QQ": "2589781425", "phone": "15937320588", "wechart": "15937320588"} |
| 20190202 | LiPengfei | {
"QQ": "2589781466", "phone": "13903730582", "wechart": "13903730582"} |
+----------+-----------+------------------------------------------------------------------------+
2 rows in set (0.00 sec)