小蔡学Java

MySQL 命令总结三

2023-12-30 18:18 1168 0 MySQL MySQL

八、索引

索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。

8.1、为已经创建好的表建立索引

1)用CREATE INDEX方法在已经创建好的表 t_student 上为其字段名 stu_id 创建普通降序索引。

语法:

create [unique | fulltext] index index_name on table_name(co_name ase|desc , [co_name ase|desc] ) 

-- 多字段索引使用逗号(,)隔开
	create index index_student on t_student(stu_id desc)

2)用ALTER TABLE…ADD INDEX方法为表t_course的字段列course_name 创建全文索引。

语法:

	alter table table_name add [unique | fulltext] index index_name(co_name ase|desc , [co_name ase|desc] ) 
-- 多字段索引使用逗号(,)隔开
	alter table t_course add fulltext index index_course_name(course_name)

8.2、创建新表时创建索引

创建表 t_teacher2,与 t_teacher 结构一致(不能复制表结构),在创建表的过程中创建索引,为 teacher_id 创建一个唯一升序索引。

	create table t_teacher2(teacher_id char(10),teacher_name char(50),index index_tea_id(teacher_id asc));

九、视图

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

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

	注意:变量名前加@表示:会话变量
	会话变量:不局限于存储过程内部

	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

3.创建一个带输入输出参数的存储过程,对某个成绩加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: ERROR 1040: Too many connections 的报错信息。一种情况是,因为访问量太高,MySQL压力过大,无法处理,这个时候可以增加’从‘服务器的数量,来缓解’读‘的压力。另外一种情况是,MySQL配置文件中 max_connections 值设置过小导致。

当前连接数

如果 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编码设置不一致导致。

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;

11.1.2、用户变量

用户变量指用户自己定义的变量,可以给用户变量分配值。可以使用set 和 select语句定义赋值(不赋值默认为空值),其中 select 语句还可以查看所赋的值。

变量作用范围:当前连接的会话范围(如果断开当前的连接,那么之前定义的变量将无法访问)。

定义用户变量的形式:以’@‘开始,如:“@var_name”,从而区分用户变量和表中列名。可以使用 '=',':=' 操作符赋值。如果使用 select 语句必须使用 ':=' 操作符赋值

语法:

set @var_name = value1 [ , @var_name = value2];
set @var_name := value1 [ , @var_name := value2];

set语句

	mysql> set @test=123;  
	Query OK, 0 rows affected (0.00 sec)

	mysql> select @test;
	+-------+
	| @test |
	+-------+
	|   123 |
	+-------+
	1 row in set (0.00 sec)


	mysql> set @var1=1,@var2=2;
	Query OK, 0 rows affected (0.00 sec)

	mysql> select @var1,@var2;
	+-------+-------+
	| @var1 | @var2 |
	+-------+-------+
	|     1 |     2 |
	+-------+-------+
	1 row in set (0.00 sec)

select语句

	mysql> select @var:=1,@var:=2;
	+---------+---------+
	| @var:=1 | @var:=2 |
	+---------+---------+
	|       1 |       2 |
	+---------+---------+
	1 row in set, 2 warnings (0.00 sec)

	mysql> select @var,@var;
	+------+------+
	| @var | @var |
	+------+------+
	|    2 |    2 |
	+------+------+
	1 row in set (0.00 sec)

11.2、SQL系统函数

11.2.1、条件判断函数

if函数

语法:

if(expr1,expr2,expr3)

如果表达式的结果是true(布尔类型),则返回expr2的值,否则返回expr3的值。

case结构

	case case_expr
	  when when_value then statement_list
	  [ when when_value then statement_list ]...
	end case

case_expr:条件判断表达式,决定哪一个 when 被执行。 when_value:表示表达式可能的值,如果某个 when_value 值与case_expr表达式值结果相同,则执行对应 then 关键字后的 statement_list 语句。

11.2.2、数学函数

常用的一种函数。主要用于处理数字,包括整型、浮点数等 数学函数

11.2.3、字符串函数

字符串函数是非常常用的一种函数。针对数据类型 数据的处理。 字符串函数

11.2.4、日期函数

日期函数

11.2.5、聚合函数

一般作用在指定字段上。 聚合函数

11.3、自定义函数

在函数种可以使用 if、case、loop、repeat、while、for语句,这部分内容请自行了解。

11.3.1、创建函数

语法:

	create function func_name(func_parameter)
	returns type
	 body

create function:创建函数的关键字 func_name:函数名称 func_parameter:函数参数列表,形式为 (param_nae type),如:(num1 int,num2 int) type:函数放回值类型,如:int、char(50)等。 body一般格式为,如下:

	begin
	   retrun(select 查询语句);
	end

delimiter 定界符: MySQL默认定界符是分号 ‘;’ 。使用 delimiter 语句,可以修改默认定界符

例子:

创建一个函数,查询某读者的年龄。

	delimiter $ 
	create function func_reader_age2(name char(50))
	returns int
	begin
	return(select year(curdate())-year(reader_birthday) from t_reader where reader_name=name);
	end $
	delimiter ;
	select func_reader_age2("肖华");

11.3.2、删除函数

	drop function function_name;

评论( 0 )

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者

文章目录