json
1 什么是JSON?
JSON是一种轻量级的数据交换格式,全称为JavaScript Object Notation(JavaScript对象表示法)。它以易于阅读和编写的文本格式来表示结构化数据,常用于Web应用程序之间的数据传输。
JSON由键值对组成 :
-
对象(Object):用花括号
{}
表示一个对象,对象由多个键值对组成,键值对之间用逗号分隔。
<span style="background-color:#f8f8f8"><span style="color:#333333">{
<span style="color:#000000">"key1"</span>: <span style="color:#aa1111">"value1"</span>,
<span style="color:#000000">"key2"</span>: <span style="color:#aa1111">"value2"</span>,
<span style="color:#000000">"key3"</span>: <span style="color:#aa1111">"value3"</span>
}</span></span>
-
数组(Array):用方括号
[]
表示一个数组,数组是由多个值组成,值之间用逗号分隔。
<span style="background-color:#f8f8f8"><span style="color:#333333">[<span style="color:#aa1111">"value1"</span>, <span style="color:#aa1111">"value2"</span>, <span style="color:#aa1111">"value3"</span>]</span></span>
二、操作
1 创建json字段
2 插入数据
-
数组:json_array(值1,值2,...)
-
对象:json_object(键1,值1,键2,值2)
insert into person values (0,"老韩",json_array("听歌","游戏"),json_object("name","老孙"))
3 查询
-
json_extract(字段名,“$.key”)
-
-> 字段名->"$.key"
-
json_keys(字段) 查询key
select id,username,hobby,json_extract(friend,"$.name") from person; select id,username,hobby,friend->"$.name" from person;
select JSON_KEYS(friend) from person
4 修改
-
json_set("字段","$.key",值)
UPDATE intro SET friend=JSON_SET(friend, '$.name', '强强') where id = 1;
也可以添加属性
update person set friend = json_set(friend,"$.age","18") where id =1
json_remove(字段,key)
update person set friend = json_remove(friend,"$.age") where id =1
5 函数搜索
-
JSON_CONTAINS(肯 忒 s) (字段,值)
-
JSON_CONTAINS (字段,值,'$.key')
SELECT * FROM person WHERE JSON_CONTAINS(hobby, '"游戏"');
SELECT * FROM person WHERE JSON_CONTAINS(friend,'"凯凯"','$.name')
注意: 值需要另外加引号,否则报错。
二 视图
1 介绍
-
视图概念:
-
视图可以由数据库的一张或者多张表中的数据组成的,可以对视图中的数据进行增删改查操作,视图可以理解成一张虚拟表,当数据库表中的数据发生变化的时候,视图中的数据也跟着发生变化
-
-
视图优点
-
我们可以把经常用的数据放到视图中,无需关心视图对应的数据库表的结构,表之间的关联关系,也不需要关心表之间的业务逻辑,简化开发人员的操作
-
增加数据的安全性,根据权限对用户进行数据访问的限制,将用户的访问之间限制在视图上,不用访问真实的数据表
-
2 使用
1 创建视图
格式
2 查看视图
可以在navicat中直接查看视图
3 修改视图
create or replace view 视图名称 as sql语句
如果存在视图名称则修改视图,如果视图名称不存在,则修改视图
create or replace view pv1 (username,girlfriend,hb) as select username,friend ,hobby from person
select * from pv1
alter view 视图名称 as sql语句
alter view pv1 (username) as select username from person
4 插入数据
和普通表插入的格式一样,但是视图改变也会将影响原来的表
insert into 视图名 () vlues ()
insert into pv1 (username,girlfriend,hb) VALUES ('飞飞',json_object("name","a"),JSON_ARRAY("听歌","下厨房"))
5 删除数据
和普通表删除数据做法一样
delete from 视图名 where 条件
delete from pv1 where username='飞飞'
6 删除视图
drop view if exists 视图名称;
注意: 当我们改变原表的时候,视图表中的内容也会发生改变。
三 存储过程
1 介绍
存储过程是一组预先编译的SQL语句,被命名并存储在数据库中。它们通常由数据库管理员或开发人员编写,并可以包含控制结构(例如条件、循环等)和输入/输出参数。存储过程可以像函数一样被调用,但它可能不返回值,也可以返回多个结果集。
2 使用
1 创建存储过程
格式:
DELIMITER //
CREATE PROCEDURE procedure_name ([IN | OUT | INOUT] parameter_name data_type, ...)
BEGIN
-- 存储过程的SQL语句
END //
DELIMITER ;
procedure_name
是你给存储过程起的名字;
parameter_name
是存储过程参数的名字;
data_type
是参数的数据类型。
DELIMITER: DELIMITER
是一个特殊的命令,用于改变语句分隔符的默认值。SQL语句的默认分隔符是分号(;
),这意味着在执行多个语句时,每个语句都必须以分号结束。然而,在创建存储过程语句时,可能包含了多个分号,这会导致MySQL在遇到第一个分号时就认为语句结束,从而产生错误。
IN
:表示参数是输入参数,用于接收调用存储过程时传递的值。
OUT
:表示参数是输出参数,用于将存储过程的计算结果返回给调用者。
INOUT
:表示参数既是输入参数,又是输出参数,用于接收值并返回结果
案例:
DELIMITER //
CREATE PROCEDURE GetStudentNameById(IN student_id INT, OUT student_name VARCHAR(255))
BEGIN
SELECT name INTO student_name FROM student WHERE id = student_id;
END //
DELIMITER ;
2 存储过程的调用
可以使用CALL
语句来调用存储过程。调用存储过程时,需要提供传递给存储过程的参数。如果存储过程有输出参数,需要在调用存储过程之前声明这些参数。
格式: CALL procedure_name([parameter_value, ...]);
-
procedure_name
是要调用的存储过程的名称; -
parameter_value
是传递给存储过程的参数值。
-- 调用存储过程,并将结果保存到@name变量中
CALL GetStudentNameById(10, @name);
-- 查看存储过程返回的结果
SELECT @name;
3 查看存储过程
SHOW PROCEDURE STATUS WHERE db = '数据库名称';
SHOW CREATE PROCEDURE 存储过程的名称;
SHOW PROCEDURE STATUS WHERE db = 'wahaha;
SHOW CREATE PROCEDURE GetStudentNameById