JSON、试图和存储过程
一、Json
1、概念:轻量级的数据交换结构,易于阅读和编写的文本格式
2、json由键值对组成
- 对象:用花括号{}表示一个对象,由多个键值对组成,键值对之间用逗号分隔
{
'键1':'值1',
'键2':'值2',
'键3':'值3',
...
}
- 数组:用方括号[]表示一个数组,有多个值组成,值之间用逗号分隔
['值1','值2','值3',...]
json在线解析可以将json字段解析成易看懂的
3、操作
- 插入数据
- 数组:json_array(值1,值2,…)
- 对象:json_object(键1,值1,键2,值2)
- 查询
- json_extract(字段名,“$.key”)
- -> 字段名->“$.key”
- json_keys(字段) 查询key
- 修改
- json_set(“字段”,“$.key”,值)
- json_remove(字段,key)
- 函数搜索
- JSON_CONTAINS (字段,值)
- JSON_CONTAINS (字段,值,‘$.key’)
二、视图(虚拟表但也占用内存)
1.概念:视图可以由数据库的一张或者多张表中的数据组成的,可以对视图中的数据进行增删改查操作,视图可以理解成一张虚拟表,当数据库表中的数据发生变化的时候,视图中的数据也跟着发生变化
2.优点:我们可以把经常用的数据放到视图中,无需关心视图对应的数据库表的结构,表之间的关联关系,也不需要关心表之间的业务逻辑,简化开发人员的操作
增加数据的安全性,根据权限对用户进行数据访问的限制,将用户的访问之间限制在视图上,不用访问真实的数据表
3.创建视图:create view 视图名称 as sql语句(可以是多表查询)
4.修改视图:create or replace view 视图名称 as sql语句
- 如果存在视图名称则修改视图,如果视图名称不存在,则修改视图
5.插入数据:insert into 视图名 () vlues ()
- 和普通表插入的格式一样,但是视图改变也会将影响原来的表
6.删除数据:delete from 视图名 where 条件
7.删除视图:drop view if exists 视图名称;
例:
#创建试图
create view v1 as select id,name,hobby,friend from person;
#在创建的同时修改字段名
create view v2(pid,pname) as select id,name from person;
#将爱好包含游戏的数据提取出来创建试图
create view v3 as select id,name,hobby,friend from person where JSON_CONTAINS(hobby, '"游戏"')
#修改试图(存在修改试图,不存在新建试图)
create or replace view v1 as select id,name from person;
create or replace view v4 as select id,name,hobby from person;
alter view v1 as select name from person;
#插入数据但是会改变原表的数据
insert into v4 values (0,'七七',JSON_ARRAY('听歌','骑车'))
#删除数据
delete from v4 where id=1;
#删除试图(if exists有这个试图就删除没有就不做动作)
drop view if exists v2;
三、存储过程
1.概念:存储过程是一组预先编译的SQL语句,被命名并存储在数据库中。它们通常由数据库管理员或开发人员编写,并可以包含控制结构(例如条件、循环等)和输入/输出参数。存储过程可以像函数一样被调用,但它可能不返回值,也可以返回多个结果集。
2.创建存储过程:
-
格式:
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
:表示参数既是输入参数,又是输出参数,用于接收值并返回结果
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 存储过程的名称;
例:
#存储过程
DELIMITER //
create PROCEDURE dept(in pid int,out pname varchar(255))
BEGIN
select name into pname from person where id = pid;
END //
DELIMITER;
#调用存储过程
CALL dept(2,@name);
#查看存储过程返回的结果
select @name;
#查看存储过程
show PROCEDURE STATUS where db='xiaozhao';
show create PROCEDURE dept;