1.存储过程和函数
1.1.介绍
1.2.创建和调用
1.3.查看和删除
1.4.存储过程语法-变量
1.5.存储过程语法-if语句
1.6.存储过程语法-参数传递
- SET @name = '张三'
-
SELECT @name
输出参数用一个用户变量去接收,调用完存储过程之后,查询这个用户变量得到输出值。
1.7.存储过程语法-case结构
1.8.存储过程语法-while循环
1.10.存储过程语法-repeat循环
1.11.存储过程语法-loop循环
1.12.存储过程语法-游标
fetch几次就打印几次结果,注意结果是分开展示的,如果fetch次数大于表记录就会报错
1.13.存储过程语法-循环获取游标
1.14.存储函数
2.触发器
2.1.使用场景
账户表每一次有数据的变动,账户日志表通过触发器生成一条日志记录2.2.概述
2.3.触发器的操作
2.3.1.insert型触发器
2.3.2.update型触发器
2.3.3.delete型触发器
2.3.4.触发器的操作
3.事务
3.1.事务介绍
3.2.事务的基本操作
先执行开启事务语句,然后一并执行转账的语句(可以包含错误语句),查看结果,此时的结果是一个临时结果(断开连接之后再重新连,结果没有保存),根据结果选择执行提交事务语句或者执行回滚事务语句,从而把结果持久化
3.3.事务的提交方式
修改事务提交方式为0手动提交,执行更新语句,若没有提交,断开连接,再重新连,数据没有更改。每次重新连接,事务提交方式都会被置为自动提交
3.4.事务的四大特征(ACID)
一致性:转账前总和是2000,转账后总和还是2000
3.5.事务的隔离级别
-
脏读的问题演示和解决
问题:窗口一设置隔离级别读未提交,窗口一窗口二分别开启事务,窗口一执行转账语句,窗口一窗口二分别查询表,看到数据变化,窗口二就是脏读,窗口二读到了窗口一未提交事务的数据(张三给李四转账,张三执行语句,说钱转过去了,李四看到变化,李四写了欠条,张三执行回滚,李四账户不会有变化,还有一个欠条)解决:设置隔离级别为读已提交,窗口一窗口二分别开启事务,窗口一执行转账语句,窗口一窗口二分别查询表,窗口一有变化,窗口二没有变化,窗口一提交,窗口二看到变化
-
不可重复读的问题演示和解决:窗口一设置隔离级别读已提交,窗口一窗口二分别开启事务,窗口一执行转账语句,窗口一窗口二分别查询表,窗口一数据变化,窗口二数据没变,窗口一提交,窗口二看到数据变化.窗口二是不可重复读,两次查询结果不一致(多次查询数据不一致,老板上午让小王查营业额100万,下午开会,老板自己查营业额80万)
解决:设置可重复读,窗口一窗口二分别开启事务,窗口一执行转账语句,窗口一窗口二分别查询表,窗口一数据变化,窗口二数据没变,窗口一提交,窗口二数据还是没变,窗口二提交事务,看到变化。(老板上午让小王查营业额,小王说财务还在统计,等统计结束再查询)
-
幻读现象:当前隔离级别是可重复读,窗口一窗口二分别开启事务,窗口一插入一条,查询发现有3条,窗口二查询发现只有2条,要插入一条,卡死,窗口一提交事务,窗口二报错,窗口二查询还是两条数据,但是提交就报错,窗口二提交事务,查询发现三条
解决:设置串行化,窗口一窗口二分别开启事务,窗口一插入一条,查询发现有3条,窗口二查询,卡死,窗口一事务不提交,窗口二不能操作,相当于锁表,窗口一事务提交,窗口二就能查出结果。
-
隔离级别小结