MySQL——存储过程、索引
一、存储过程
1、存储过程使用的场景
例如:有一个购物网站,要验证查询商品的性能,测试之前肯定要准备大量的测试数据,如果是通过 执行 insert 语句一条一条进行插入,效率很低。这种情况下,写一个存储过程来实现造数据。
2、存储过程的定义
存储过程就是数据库中的一段SQL代码。
3、使用存储过程的步骤
- 先创建存储过程;
- 调用存储过程(与调用python中的函数(例如:print、input等)是一样的)。
4、如果只是创建了存储过程,不调用存储过程不执行。
5、创建存储过程
语法:
delimiter $$
create procedure 存储过程的名称(参数)
begin
存储过程体
end $$
delimiter ;
6、调用存储过程
语法:call 存储过程的名称(参数);
7、删除存储过程
语法:drop procedure 存储过程的名称;
8、存储过程的变量
(1)局部变量
局部变量的定义:
方法一:定义变量的同时给变量赋值了
declare 变量名 数据类型 default 默认值;
方法二:先定义变量,后赋值
declare 变量名 数据类型;
set 变量名 = 值;
什么是局部变量?
定义的变量只能在局部范围内使用,MySQL中的局部变量只能在存储过程内使用(在 begin 和 end 中间使用),出了存储过程就无法使用。在存储过程外部使用局部变量,是无法使用的。
(2)用户变量对应于python中的全局变量
定义:用户变量不需要事先声明,MySQL会自动根据值来确定类型。这种变量在使用时一定要在变量名前面加上一个@符号。
用户变量的作用范围:这个会话有效,不管在存储过程内部还是存储过程外部都可以使用。
9、使用select语句赋值
指的是把从某一张表中查询出来的数据赋值给某一个变量。
语法:select 列名1, 列名2 into 变量1, 变量2 from 表名 where 条件;
注意事项:
- into前面的列的数量要与into后面变量的数量要一致。
- where条件只能查询出来一行数据,否则无法赋值。
10、存储过程中的参数
(1)in参数(入参)
创建一个带有in参数的存储过程:
语法:
delimiter $$
create procedure 存储过程的名称(in 参数名 数据类型)
begin
select * from 表名 where 列名 比较运算符 in 参数的名称;
end $$
delimiter ;
(2)out参数(出参)
out参数类似于python中的返回值(return)。
创建带有out参数的存储过程:
语法:
delimiter $$
create procedure 存储过程名称(out 参数名 数据类型)
begin
Select 列名 into 参数名 from 表名 where 条件;
end $$
delimiter ;
调用带有out参数的存储过程:
语法:
call 存储过程名称(@用户变量名称);
select @用户变量名称;
11、if分支结构
语法:
if 条件表达式 then
分支语句1;
else
分支语句2;
end if;
12、case多分支结构
语法:when的作用相当于if,用来做条件的判断的。
else可以省略,如果when语句已经把所有的条件都覆盖了,此时就可以不写else
语法:
case
when 条件表达式1 then 分支语句1;
when 条件表达式2 then 分支语句2;
......
when 条件表达式n then 分支语句n;
else 分支语句;
end case;
13、循环结构
(1)while循环
语法:
while 条件表达式 do
循环语句;
end while;
while循环执行的过程:
- while循环每次循环开始时,先判断条件表达式是否成立;
- 如果条件成立,就执行循环语句;
- 如果条件不成立,循环就结束了。
(2)repeat循环
语法:
repeat
循环语句;
until 条件表达式
end repeat;
repeat循环执行的过程:
- repeat先执行一次循环,然后再判断条件表达式是否成立;
- 如果条件成立,循环就结束了;
- 如果条件不成立,继续循环。
二、索引
1、索引的定义
索引是用来帮助MySQL高效率查询数据的一种数据结构。可以把索引理解为书的目录。索引一般用于数据量非常大的表中。
2、索引的优缺点
优点:帮助用户提高查询效率。
缺点:占用存储空间,降低插入数据的效率。
3、通过索引字段和非索引字段进行查询效率的比较。主键就是主键索引,所以,主键就是索引字段。外键也是索引。