MySQL5.7 新特性之JSON类型
随着NOSQL数据库的广泛应用,可扩展的存储方式在关系型数据库中也有了很好的支持,MySQL5.7中就新增加了一个数据类型:JSON。
JSON数据类型意义
其实,没有JSON数据类型的支持,我们一样可以通过varchar类型或者text等类型来保存这一格式的数据,但是,为什么还要专门增加这一数据格式的支持呢?其中肯定有较varchar或者text来存储此类型更优越的地方。
- 保证了JSON数据类型的强校验,JSON数据列会自动校验存入此列的内容是否符合JSON格式,非正常格式则报错,而varchar类型和text等类型本身是不存在这种机制的。
- MySQL同时提供了一组操作JSON类型数据的内置函数。
- 更优化的存储格式,存储在JSON列中的JSON数据会被转成内部特定的存储格式,允许快速读取。
- 可以基于JSON格式的特征支持修改特定的键值。(即不需要把整条内容拿出来放到程序中遍历然后寻找替换再塞回去,MySQL内置的函数允许你通过一条SQL语句就能搞定)。
练习
需要5.7以上版本
SELECT VERSION();#查看mysql版本
CREATE TABLE USER(
UID INT AUTO_INCREMENT,
DATA JSON,
PRIMARY KEY(UID)
)#创建表结构,DATA是JSON类型
INSERT INTO USER VALUES (NULL,'{"name":"wang","address":"shenyang"}');#插入两条数据
INSERT INTO USER VALUES (NULL,'{"name":"zhao","address":"riben"}');
SELECT * FROM `USER`;
ALTER TABLE USER ADD USER_NAME VARCHAR(20) GENERATED ALWAYS AS (DATA->'$.name');#创建虚拟列user_name,内容是data中的name
ALTER TABLE USER ADD INDEX IDX_NAME(USER_NAME);#创建user_name是索引
SELECT * FROM USER WHERE USER_NAME = '"wang"';
INSERT INTO USER(UID,DATA) VALUES (NULL,'{"name":"pan","address":"sichuan"}');#后续插入数据时注意虚拟列中不允许插入值