mysql的JSON函数和虚拟列
前言
说来惭愧, 也是最近更新mysql8.0后看看有什么新东西, 才发现了原来5.7就出来了这两个功能, 自己还一直不知道, 还是知道的太少了
正文
虚拟字段
这里有虚拟字段使用的一些详细规则, 可以看看: 参考文章
navicat中,突然发现有一列虚拟, 它是mysql 5.7 后增加的新特性, 勾选上的字段就会变成虚拟字段, 顾名思义, 虚拟字段不是真正持久化在数据库的字段, 选中它后下面会出现一些设置, 需要注意的就 "虚拟类型" 和 "表达式" 这两个
虚拟类型
- 计算列(Computed Column):计算列是根据其他列的值计算得出的虚拟列。它的值不会实际存储在数据库中,而是在查询时动态计算得出。计算列可以使用表达式、函数或其他列的值来计算。计算列的值是实时计算的,因此在每次查询时都会重新计算
- 存储列(Stored Column):存储列是根据其他列的值计算得出的虚拟列,但它的值会实际存储在数据库中。存储列的值在插入或更新数据时计算并存储在数据库中,因此在查询时不需要重新计算。存储列可以提高查询性能,特别是对于频繁使用的计算操作, 所以说, 可以将 STORED 虚拟列与普通列可以互相转化,但 VIRTUAL 不行
表达式
这也就是使用虚拟键的真正目的, 完成你想要的表达式效果. 表达式可以包括列的算术运算、字符串连接、函数调用等
- 数值和字符串常量:可以使用数字、字符串等常量作为表达式的一部分
- 数值和字符串函数:可以使用MySQL提供的各种数值和字符串函数作为表达式的一部分,如ABS()、ROUND()、CONCAT()等
- 算术运算符:可以使用加减乘除等算术运算符进行数值计算
- 逻辑运算符:可以使用AND、OR、NOT等逻辑运算符进行逻辑操作
- 比较运算符:可以使用大于、小于、等于等比较运算符进行比较操作
- CASE语句:可以使用CASE语句进行条件判断,并返回相应的结果
这是个人的实例, 动态查出年龄+手机的格式 ,当我查询所有的时候, 虚拟字段就是展示我想要的结果
注意:
- 使用了虚拟字段后插入就不能使用
insert into study1 VALUES(8,'4',8,'8','' );
这种全量插入了, 只能指定字段对应插入 - 虚拟字段无法进行任何更新操作,只能查询展示
更多注意事项参考参考文章
JSON函数
顾名思义, 就是对 json 格式数据的支持及操作函数 , 这个只需要记住函数的使用即可
-
JSON_OBJECT
- 用法:JSON_OBJECT(key1, value1, key2, value2, ...)
- 功能:创建一个JSON对象,指定键值对。
- 示例:SELECT JSON_OBJECT('name', 'John', 'age', 25);
结果:{"name": "John", "age": 25}
-
JSON_ARRAY
- 用法:JSON_ARRAY(value1, value2, ...)
- 功能:创建一个JSON数组,包含给定的值。
- 示例:SELECT JSON_ARRAY('apple', 'banana', 'orange');
结果:["apple", "banana", "orange"]
-
JSON_EXTRACT
- 用法:JSON_EXTRACT(json_doc, path)
- 功能:从JSON文档中提取指定路径的值。
- 示例:SELECT JSON_EXTRACT('{"name": "John", "age": 25}', '$.name');
结果:John
-
JSON_SET
- 用法:JSON_SET(json_doc, path, value)
- 功能:设置JSON文档中指定路径的值。
- 示例:SELECT JSON_SET('{"name": "John", "age": 25}', '$.age', 30);
结果:{"name": "John", "age": 30}
-
JSON_REMOVE
- 用法:JSON_REMOVE(json_doc, path)
- 功能:从JSON文档中删除指定路径的值。
- 示例:SELECT JSON_REMOVE('{"name": "John", "age": 25}', '$.age');
结果:{"name": "John"}
-
JSON_ARRAY_APPEND
- 用法:JSON_ARRAY_APPEND(json_doc, path, value)
- 功能:将值追加到JSON数组的末尾。
- 示例:SELECT JSON_ARRAY_APPEND('["apple", "banana"]', '$', 'orange');
结果:["apple", "banana", "orange"]
-
JSON_ARRAY_INSERT
- 用法:JSON_ARRAY_INSERT(json_doc, path, value)
- 功能:在指定位置插入值到JSON数组中。
- 示例:SELECT JSON_ARRAY_INSERT('["apple", "banana"]', '$[1]', 'orange');
结果:["apple", "orange", "banana"]
除了上面常用的, 还有其他一些:
- JSON_SEARCH : 搜索给定的值,并返回包含该值的路径
- JSON_VALID : 检查给定的字符串是否为有效的JSON格式
- JSON_MERGE : 将两个或多个JSON对象合并为一个。它接受一个或多个参数,每个参数都是一个JSON对象。函数会将这些对象合并为一个新的JSON对象
- JSON_REPLACE : 在JSON对象中替换指定的键值对
- JSON_OBJECTAGG : 将多个键值对聚合成一个JSON对象
- JSON_KEYS : 获取JSON对象的所有键, 会返回一个包含JSON对象中所有键的数组
- JSON_ARRAYAGG : 将多个JSON数组合并成一个JSON数组。它接受一个或多个参数,每个参数都是一个JSON数组
- JSON_LENGTH : 用于获取JSON数组或对象的长度
- JSON_UNQUOTE : 用于将JSON字符串中的引号去掉
- JSON_CONTAINS : 用于检查一个JSON字符串是否包含指定的键/值 对
- JSON_TYPE : 判断一个JSON对象的类型,比如 "object","array"等