Mysql中级篇

😄事务性质(ACID):

1.原子性。事务是数据库执行的基本单位,不能再分。要么就执行整个事务,要么就不执行。

2.一致性。事务前后的状态变化应该是一致的。比如A给B转账100,如果说B的余额增加而A的余额不变,则 就不一致。

3.隔离性。由于数据库的隔离,每个事务都感觉不到其他事务的存在。

4.永久性。数据已经改变就无法撤销。

😆事务发生的问题:

1.脏读。 T1读了T2修改的数据,然后T2又撤回了(回滚),T1读了无效的数据。

2.不可重复读。 T1读了一次数据,T2改了数据,T1又读了一次,两次查询的结果不一样。

3.幻读。 T1对所有行操作,T2插入了一行,后来用户发现有一行没有被操作,像幻觉一样。

😁数据库四个隔离级别:

1.读未提交。 T1还没有提交事务,其他事务也可以操作。

2.读已提交。 T1读的时候,T2就不能改T1正读的数据,直到T1提交。防脏读。

3.可重复读。 T1还没提交的时候就,T2读的是之前的数据。防脏读和不可重复读。Mysql的默认隔离级 别。

4.可串行化。 每个事务依次执行,可避免三种问题,但效率低。

在开始事务前修改隔离级别:set transaction isolation level xxxx;

开始事务:set autocommit=0;

start transaction;

结束事务:commit;

保存断点:savepoint a;

回滚:rollback to a;

✌️视图:

视图是个虚拟表,保护数据,只占用逻辑空间,用来查找,不用来更新。

create/replace/alter view 视图名 as + DQL语句;

drop view 视图名;

desc view 视图名;

show create 视图名;

delete 可以回滚,truncate不能回滚。

😳变量:

系统变量:

global 全局变量 针对服务器,不跨重启。

session 会话变量 针对本次连接。

自定义变量:

用户变量:

声明赋值: set @name=key;

赋值:select @xxx into 变量名 from 表名

使用:select name;

局部变量:

声明:declare name

声明结束符:delimiter $

😉存储过程:

参数类型有三种:in只作为值传入,out作为返回值,inout既传入又可返回

create procedure xxx(类型 参数;类型 参数)

Begin

Sql语句;

end$

call xxx(参数)$

drop procedure xxxx;

show create procedure xxxx;

😂函数:

create function xxx(参数) returns 类型

begin

sql;

return 变量;

end$

select xxxx;

函数有且只有一个返回值,对数据进行操作,存储过程主要是封装查询,执行dql语句。

😎流程控制:

1.if(ex1,ex2,ex3)

2.case when then else

3.if then elseif then end if

😋循环:

1.label:while 判断

do 循环体

end while label;

2.label:repeat

循环体

until 结束条件

end repeat :label;

3.label:loop

循环体

end loop:label;

(无限循环)

iterate 相当于continue,leave 相当于break。

posted @ 2020-04-16 21:23  Xiao-zhi  阅读(168)  评论(0)    收藏  举报