Mysql中级篇
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
循环体
(无限循环)

浙公网安备 33010602011771号