八、事务管理
==事务的概念==:
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。即在事务中,每个mysql语句相互依赖,一旦某条sql语句一旦执行失败或产生错误,整个单元将会回滚事务的ACID属性
Atomic:原子性,指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
Consistency:一致性,事务必须使数据库从一个一致性状态切换到另一个一致性状态,比如金额总额2000,转账后和还得是2000
Isolation:隔离性,一个事务的执行不能被其他事务干扰
Durability:持久性,事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的操作和数据库故障不应该对其有影响==事务的创建==
开启事务
set autocommit=0;
start transaction(可选的)
编写sql
select insert update delete增删改查...,不能是表或库的操作create等......
提交或回滚事务
commit;提交事务rollback;
回滚事务(即sql语句不实现
==隔离级别==
==默认是第3级别,可重复读==,但是会出现幻读(即一个事务还没有提交,在另外一边进行了Insert等操作,导致表发生变化,最终提交事务时影响的行数增加
级别 脏读 不可重复读 幻读 read uncommitted yes yes yes read committed no yes yes repeatable read no no yes serializable no no no ==脏读==
一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
==不可重复读==
一个事务多次读取,结果不一样
==幻读==一个事务读取了其他事务还没有提交的数据,只是读到的是其他事务“插入”的数据
==设置隔离级别==
查看当前隔离级别:
select @@tx_isolation;
设置当前mysql连接的隔离级别:
set transaction isolation level 级别
设置数据库系统的全局隔离级别:
set global transaction isolation level 级别
设置保存点:
savepoint 名称;搭配rollback使用回滚至保存点
九、视图
- 含义:虚拟表,和普通表一样使用,mysql5.1版本之后出现的新特性,是通过表动态生成的数据。其实就是封装一个sql逻辑。只有在被调用的时候才会创建表。
1. 创建视图
/*创建视图*/
create view 视图名 as 查询语句
/*调用视图*/
select * from 视图名 where 筛选条件......
2. 修改视图
/*方式一*/
create or replace view 视图名 as 查询语句;当视图存在的时候就代替,不存在就创建
/*方式二*/
alter view 视图名 as 查询语句
3. 查看视图
desc 视图名
show create view 视图名 /*创建并查看*/
4. 删除视图
drop view 视图名,视图名,......;
5. 视图和表的比较
创建语法的关键字 | 是否实际占用物理空间 | 使用 | |
---|---|---|---|
视图 | create view | 只是保存了sql逻辑 | 一般只是查询 |
表 | create table | 保存了数据 | 增删改查 |
十、变量
1. 类型
- 全局变量:作用域为多个会话
- 会话变量(自定义用户变量):作用域为单个会话,针对当前会话有效
2. 赋值
声明并初始化
set @用户变量名=值
赋值
方式一:通过set或select,同初始化 方式二:通过select into:select 字段 into 变量名 from 表名;
使用
select @用户变量名
3. 局部变量
作用域:仅仅在定义它的begin中end有效
声明
declare 变量名 类型; declare 变量名 类型 defautl 值;
赋值、使用同上
对比局部变量和用户变量
作用域 定义和使用的位置 语法 用户变量 当期会话 会话中的任何地方 必须加@符号 局部变量 begin end中 只能在begin end中,且为第一句话 一般不用加@符号