mysql-速成补充

目录

1.演示事务

​编辑 1.1 read-uncommitted       

1.2 read-committed

1.3  repeatable read 

1.4 幻读

 1.5  serializable

1.6 savepoint

 2 变量

2.1 语法

2.2 举例

3 存储过程和函数

3.1 特点和语法

3.2 举例

 4.函数 

4.1 语法

4.2 举例

5 流程控制

5.1 分支结构

5.1.1 语法

5.1.2 举例

5.2 循环结构

5.2.1 语法

5.2.2 举例


1.演示事务

        通过命令行进行事务的演示

首先重启事务 

mysql-速成补充_第1张图片mysql-速成补充_第2张图片

查看当前默认隔离级别

mysql-速成补充_第3张图片

mysql-速成补充_第4张图片

mysql-速成补充_第5张图片

执行事务

mysql-速成补充_第6张图片 1.1 read-uncommitted       

 再开启一个链接登录修改隔离级别 read-uncommitted;

mysql-速成补充_第7张图片

 查看表发现此时已经将'zhangwuji' 改成了‘john’

mysql-速成补充_第8张图片

回滚之后再去查看 发现幻读。

mysql-速成补充_第9张图片

总结:  脏读,不可重复读和幻读都不能避免

1.2 read-committed

修改事务

mysql-速成补充_第10张图片

开启事务

mysql-速成补充_第11张图片

 再另一个窗口里面修改隔离级别

mysql-速成补充_第12张图片

查看隔离级别 变成了张无忌  

 mysql-速成补充_第13张图片

将蓝色的部分提交,重新查看黑色的部分,结果和上一次不一样,出现了不可重复读。

mysql-速成补充_第14张图片

总结: 避免了脏读,但是不可重复读和幻读依旧可以出现

1.3  repeatable read 

修改两个隔离级别

修改,蓝色的部分提交。发现两次一样

mysql-速成补充_第15张图片

 最后把黑色部分提交了,发现结果才发生了改变。

 mysql-速成补充_第16张图片

 可以解决脏读,不可重复读,不能解决幻读

1.4 幻读

        重新开启一个事务 update 此时没有执行

mysql-速成补充_第17张图片

 同时在黑色里面开启一个事务,插入数据

mysql-速成补充_第18张图片

 此时发现修改了3行,原来本意是修改两行

mysql-速成补充_第19张图片

 1.5  serializable

此隔离级别可以解决以上所有情况的问题

使用幻读来举例:

此时黑色的部分出现了阻塞。只有蓝色阻塞才能开始

mysql-速成补充_第20张图片

 mysql-速成补充_第21张图片

 总结

mysql-速成补充_第22张图片

1.6 savepoint

只能搭配rollback 使用。

mysql-速成补充_第23张图片

 2 变量

2.1 语法

分类
一、系统变量
说明:变量由系统提供的,不用自定义
语法:
①查看系统变量
show 【global|session 】variables like ''; 如果没有显式声明global还是session,则默认是session
②查看指定的系统变量的值
select @@【global|session】.变量名; 如果没有显式声明global还是session,则默认是session
③为系统变量赋值
方式一:
set 【global|session 】 变量名=值; 如果没有显式声明global还是session,则默认是session
方式二:
set @@global.变量名=值;
set @@变量名=值;


1、全局变量
服务器层面上的,必须拥有super权限才能为系统变量赋值,作用域为整个服务器,也就是针对于所有连接(会话)有效

2、会话变量
服务器为每一个连接的客户端都提供了系统变量,作用域为当前的连接(会话)


二、自定义变量
说明:
1、用户变量
作用域:针对于当前连接(会话)生效
位置:begin end里面,也可以放在外面
使用:

①声明并赋值:
set @变量名=值;或
set @变量名:=值;或
select @变量名:=值;

②更新值
方式一:
    set @变量名=值;或
    set @变量名:=值;或
    select @变量名:=值;
方式二:
    select xx into @变量名 from 表;

③使用
select @变量名;

2、局部变量
作用域:仅仅在定义它的begin end中有效
位置:只能放在begin end中,而且只能放在第一句
使用:
①声明
declare 变量名 类型 【default 值】;
②赋值或更新
方式一:
    set 变量名=值;或
    set 变量名:=值;或
    select @变量名:=值;
方式二:
    select xx into 变量名 from 表;
③使用
select 变量名;


 

2.2 举例

1.全局变量

mysql-速成补充_第24张图片

 2.自定义变量

mysql-速成补充_第25张图片

mysql-速成补充_第26张图片

3 存储过程和函数

3.1 特点和语法

说明:都类似于java中的方法,将一组完成特定功能的逻辑语句包装起来,对外暴露名字
好处:
1、提高重用性
2、sql语句简单
3、减少了和数据库服务器连接的次数,提高了效率

mysql-速成补充_第27张图片

 mysql-速成补充_第28张图片

 mysql-速成补充_第29张图片

一、创建 ★
create procedure 存储过程名(参数模式 参数名 参数类型)
begin
        存储过程体
end
注意:
1.参数模式:in、out、inout,其中in可以省略
2.存储过程体的每一条sql语句都需要用分号结尾

二、调用
call 存储过程名(实参列表)
举例:
调用in模式的参数:call sp1(‘值’);
调用out模式的参数:set @name; call sp1(@name);select @name;
调用inout模式的参数:set @name=值; call sp1(@name); select @name;
三、查看
show create procedure 存储过程名;
四、删除
drop procedure 存储过程名;

3.2 举例

插入3个人

 复制到终端mysql-速成补充_第30张图片

mysql-速成补充_第31张图片

mysql-速成补充_第32张图片

 #调用

mysql-速成补充_第33张图片

#创建in 模式的

代码:

mysql-速成补充_第34张图片

#在命令行打开mysql 进入到相应的数据库,输入代码,

mysql-速成补充_第35张图片

 sqlyog 已经存在了。

mysql-速成补充_第36张图片

 #调用

     mysql-速成补充_第37张图片

 没有报错只是这里面没有对应的数据而已。

#创建带有out的模式

        案例根据女神名返回对应的男神名

        mysql-速成补充_第38张图片

#带有inout 的方法 需要先选择一个数据库才能有存储过程的内容

案例 传入a,b 两个值,最终a和b 多翻倍并返回

代码

DELIMITER $
CREATE PROCEDURE myp4(INOUT a INT ,INOUT b INT)
BEGIN

	SET a=a*2;
	SET b=b*2;
	

END $
SET @a=10$
SET @b=20$
CALL myp4(@a,@b)$
SELECT @a $
SELECT @b $

mysql-速成补充_第39张图片

#存储过程的删除

mysql-速成补充_第40张图片

#存储过程的查看

show create procedure 存储过程名

mysql-速成补充_第41张图片

 4.函数 

4.1 语法

一、创建
create function 函数名(参数名 参数类型) returns  返回类型
begin
    函数体
end

注意:函数体中肯定需要有return语句
二、调用
select 函数名(实参列表);
三、查看
show create function 函数名;
四、删除
drop function 函数名;

mysql-速成补充_第42张图片

 mysql-速成补充_第43张图片

4.2 举例

#无参有反

        mysql-速成补充_第44张图片

 

mysql-速成补充_第45张图片

 

mysql-速成补充_第46张图片

 #有参有反

mysql-速成补充_第47张图片

 mysql-速成补充_第48张图片

 #函数的查看

 在mysql proc 右击打开表

mysql-速成补充_第49张图片

#删除函数

        mysql-速成补充_第50张图片

 

5 流程控制

说明:
顺序结构:程序从上往下依次执行
分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行
循环结构:程序满足一定条件下,重复执行一组语句

5.1 分支结构

5.1.1 语法

特点:
1、if函数
功能:实现简单双分支
语法:
if(条件,值1,值2)
位置:
可以作为表达式放在任何位置
2、case结构
功能:实现多分支
语法1:
case 表达式或字段
when 值1 then 语句1;
when 值2 then 语句2;
..
else 语句n;
end [case];

语法2:
case 
when 条件1 then 语句1;
when 条件2 then 语句2;
..
else 语句n;
end [case];


位置:
可以放在任何位置,
如果放在begin end 外面,作为表达式结合着其他语句使用
如果放在begin end 里面,一般作为独立的语句使用
3、if结构
功能:实现多分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
else 语句n;
end if;
位置:
只能放在begin end中

5.1.2 举例

case 结构

mysql-速成补充_第51张图片

 

        mysql-速成补充_第52张图片

 

mysql-速成补充_第53张图片

 

mysql-速成补充_第54张图片

 

5.2 循环结构

5.2.1 语法

位置:
只能放在begin end中

特点:都能实现循环结构

对比:

①这三种循环都可以省略名称,但如果循环中添加了循环控制语句(leave或iterate)则必须添加名称

loop 一般用于实现简单的死循环
while 先判断后执行
repeat 先执行后判断,无条件至少执行一次


1、while
语法:
【名称:】while 循环条件 do
        循环体
end while 【名称】;
2、loop
语法:
【名称:】loop
        循环体
end loop 【名称】;

3、repeat
语法:
【名称:】repeat
        循环体
until 结束条件 
end repeat 【名称】;

二、循环控制语句
leave:类似于break,用于跳出所在的循环
iterate:类似于continue,用于结束本次循环,继续下一次

5.2.2 举例

mysql-速成补充_第55张图片

 

mysql-速成补充_第56张图片

 

#leave 语句

mysql-速成补充_第57张图片

mysql-速成补充_第58张图片 

mysql-速成补充_第59张图片

 

#添加iterate 语句

mysql-速成补充_第60张图片

 

 

mysql-速成补充_第61张图片

 

 总结:

mysql-速成补充_第62张图片

 

        

你可能感兴趣的:(mysql,数据库)