关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

【收藏级】MySQL 100条命令,基本操作的所有内容(常看常新)(三)

发布时间:2023-06-30 18:00:41

九、视图

视图(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

  1. 创建一个带输入参数的存储过程,查询某个学号对应的学生信息。
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

  1. 创建一个带输出参数的存储过程,查询所有学生的人数。

注意:变量名前加@表示:会话变量

会话变量:不局限于存储过程内部

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

  1. 创建一个带输入输出参数的存储过程,对某个成绩加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;

   




/template/Home/leiyu/PC/Static