九、视图
视图(View)其实是从一个或多个关系表(或视图)当中导出的表,是一个虚表类似一个软链接。
9.1、创建视图
建一个视图view_basic_info,数据来源于t_student表
语法:create view <视图名> as select_statement
create view view_basic_info as select * from t_student;
9.2、修改视图
语法:create view <视图名> as select_statement
alter view view_basic_info as select * from t_student;
9.3、删除视图
drop view view_basic_info;
十、存储过程
存储过程和程序中的函数非常相似,它可以将某些需要多次调用、实现某个特定任务的代码段编写成一个过程,将其保存在数据库中,并通过过程名来调用,这些过程称为存储过程。
DELIMITER 定义:设置语句结束后使用的分隔符,MYSQL的默认结束符为";"。
10.1、创建存储过程
mysql> delimiter $ mysql> create procedure p1() -> comment '读者信息' -> begin -> select * from t_reader; -> end $ mysql> delimiter ;
10.2、调用存储过程
mysql> call p1;
10.3、删除存储过程
mysql> drop procedure p1;
10.4、创建带参数的存储过程
10.4.1、in
- 创建一个带输入参数的存储过程,查询某个学号对应的学生信息。
mysql> delimiter $ mysql> create procedure p3(in stuid char(10)) comment "查询某个学号对应的学生信息" begin select * from t_student where stu_id=stuid; end $ mysql> delimiter ; mysql> call p3(1631607102); #调用存储过程
10.4.2、out
- 创建一个带输出参数的存储过程,查询所有学生的人数。
注意:变量名前加@表示:会话变量
会话变量:不局限于存储过程内部
mysql> delimiter $ mysql> create procedure p6(out stucount int) begin select COUNT(stu_id) into stucount from t_student; end $ mysql> delimiter ; mysql> call p6(@stucount); #调用存储过程 mysql> select @stucount; #查看输出变量
10.4.3、inout
- 创建一个带输入输出参数的存储过程,对某个成绩加20分。
mysql> delimiter $ mysql> create procedure p9(inout testname int) begin update t_score set grade=grade+20 where score_id=testname; select grade into testname from t_score where score_id=testname; end $ mysql> delimiter ; mysql> set @testname=1001; mysql> call p9(@testname); mysql> select @testname;
@pra:会话变量不局限于存储过程内部
十一、SQL编程基础
11.1、SQL编程基础语法
SQL本质就是一种编程语言,需要变量来保存数据。MySQL中许多属性控制都是通过MySQL中的变量老实现的。
变量分为两大类:系统变量和用户变量;
系统变量:针对所有用户,即MySQL中所有客户端都有效。
用户变量:针对指定对应的用户。
11.1.1、系统变量
MySQL系统变量实际上是用来存储系统参数的,用于初始化和设置MySQL对系统资源的占用,配置文件存放位置等。大部分变量都是作为MySQL系统的调节参数存在,修改这些参数会影响MySQL的运行方式。
系统变量:分为全局(global)变量和会话(session)变量。
全局变量:影响整个MySQL实例的整体操作。
会话变量:影响当前到MySQL实例的连接。
11.1.1.1、查看系统变量
11.1.1.1.1、会话变量和全局变量
语法:show variables 条件语句
条件语句:代表要查询系统变量的筛选条件(可选项)
查看所有系统变量;优先显示会话变量,其次显示全局变量。
show variables; //查看所有系统变量
通过global、session关键字,限制系统变量作用域。
show global variables; //查看全局变量 show session variables; //查看会话变量
如果要查看的是某些具体的系统变量,而不是全部,可以使用like和where语句:
show variables like 'log%'; //查询所有变量名以log开头的系统变量
如果在查询时,条件中除了以变量名为条件,还要以值为条件,可以使用where语句:
show variables where variable_name like 'log%' and value='OFF';
11.1.1.1.2、配置变量和监控变量
MySQL系统变量还能分为:配置变量和监控变量
show variables; // 查看配置变量 show status; // 查看监控变量
同理,若想在查询系统状态变量时,增加条件语句,方式和查询配置变量时相同。
11.1.1.2、常见的系统变量
工作中,数据库一般分为“开发库”、“测试库”、“线上库”等环境。
查看当前MySQL版本信息
mysql> show variables like 'version%'; +-------------------------+------------------------------+ | Variable_name | Value | +-------------------------+------------------------------+ | version | 8.0.30 | | version_comment | MySQL Community Server - GPL | | version_compile_machine | x86_64 | | version_compile_os | Win64 | | version_compile_zlib | 1.2.12 | +-------------------------+------------------------------+ 5 rows in set, 1 warning (0.02 sec)
最大连接数
在连接数据库时,经常会遇到
MySQL: ERROR 1040: Too many connections
的报错信息。一种情况是,因为访问量太高,MySQL压力过大,无法处理,这个时候可以增加’从‘服务器的数量,来缓解’读‘的压力。另外一种情况是,MySQL配置文件中max_connections
值设置过小导致。
mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 200 | +-----------------+-------+ 1 row in set, 1 warning (0.00 sec)
当前连接数
如果
Threads_connected <= max_connections
才能保证正常连接数据库。
mysql> show status like 'Threads_connected'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 1 | +-------------------+-------+ 1 row in set (0.00 sec)
MySQL编码配置信息
如果出现中文乱码问题,一般是MySQL编码设置不一致导致。
mysql> show variables like '%set%'; +---------------------------------------+---------------------------------------------------------------+ | Variable_name | Value | +---------------------------------------+---------------------------------------------------------------+ | auto_increment_offset | 1 | | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8mb3 | | character_sets_dir | D:\APP\Pro_Software\MYSQL\mysql-8.0.30-winx64\share\charsets\ | | innodb_monitor_reset | | | innodb_monitor_reset_all | | | optimizer_trace_offset | -1 | | performance_schema_setup_actors_size | -1 | | performance_schema_setup_objects_size | -1 | | resultset_metadata | FULL | | transaction_write_set_extraction | XXHASH64 | +---------------------------------------+---------------------------------------------------------------+ 16 rows in set, 1 warning (0.00 sec)
11.1.1.3、设置和修改系统变量
对系统变量,在MySQL服务启动前,我们可以修改 my.cnf 配置文件;或启动时,指定启动参数修改。
在服务启动以后,可以通过 set 语句修改变量值。
//修改全局变量 set global var_name = value; set @@global.var_name = value; //修改会话变量 set session var_name = value; set @@session.var_name = value;