脚本宝典收集整理的这篇文章主要介绍了

MySQL原生JSON格式的简单使用

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

MySQL 5.7+ 开始支持原生JSON,可以对JSON格式的内容进行插入校验,以及对其内部字段单独查询,推荐对JSON内容使用JSON格式。

-- 创建表
CREATE TABLE t (
id int(11) DEFAULT NULL,
info json DEFAULT NULL
);

-- 插入校验
INSERT INTO t(id, info) VALUES (1, '{"name": "Jack", "age": 28}'); -- 插入成功
-- INSERT INTO t(id, info) VALUES (2, 'xxxxxx'); -- 插入失败,Invalid JSON text

-- 只查询info里面的name字段
SELECT info->'$.name' FROM t WHERE id=1; -- Jack 注意,$.name的引号不能省略
-- 或者
SELECT json_extract(info, '$.name') FROM t WHERE id=1; -- Jack

此外,可以对JSON内部的字段创建虚列,虚列的值可以根据JSON的内容自动更新,像普通列一样查询(但是不能插入和更新),以及创建索引
-- 创建虚列
ALTER TABLE t ADD username varchar(10) GENERATED ALWAYS AS (info->'$.name') VIRTUAL;
-- 或者 ALTER TABLE t ADD username varchar(10) GENERATED ALWAYS AS (json_extract(info, '$.name)) VIRTUAL;

-- 虚列可以像普通列一样查询
SELECT username FROM t WHERE id=1; -- Jack

-- 插入JSON时,自动生成虚列的值
INSERT INTO t(id, info) VALUES (2, '{"name": "Lily", "age": 26}');
SELECT username FROM t WHERE id=2; -- Lily

-- 更改JSON内容,虚列值自动更新
UPDATE t SET info='{"name": "Lucy", "age": 26}' WHERE id=2;
SELECT username FROM t WHERE id=2; -- Lucy

-- 不允许更新虚列的值
-- UPDATE t SET username='Tom' WHERE id=2; -- The value specified for generated column 'username' in table 't' is not allowed.

-- 可以给序列创建索引,就像普通列一样
ALTER TABLE t ADD INDEX idx_username(username);

EXPLAIN SELECT * FROM t WHERE username='Jack'; -- 可以用到idx_username这个索引

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

| 1 | SIMPLE | t | NULL | ref | idx_username | idx_username | 33 | const | 1 | 100.00 | NULL |

总结

以上是脚本宝典为你收集整理的

MySQL原生JSON格式的简单使用

全部内容,希望文章能够帮你解决

MySQL原生JSON格式的简单使用

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过