视图
即sql语句的封装,本身不保存数据,数据来自基础表或者其他视图
- 查看表结构:desc v(视图名字)
- 删除视图:drop view v(视图名字)
为什么使用视图?
- 限制其他用户对数据库表的访问,因为视图可以有选择性的显示数据表的一部分
- 容易实现复杂的查询
- 对于相同的数据可以产生不同的视图
事务特征ACID
- 原子性(Atomicity)
事务是不能分割的最小单位
- 一致性(Consistency)
事务完成之后数据保持一致
- 隔离性(solation)
事务之间互不影响【和隔离级别有关系】
- 持久性(Durabiity)
断电之后重启数据还是事务完成时候的状态
如何操作事务
方式一
begin\commit\rollback(回滚到开始状态)
方式二
Set @@autocommit=0/Commit/rollback
案例一
rollback事务回滚到begin位置,
案例二
-- 获取当前会话事务是否自动提交
Select @@autocomiit -- 0不自动提交 1自动提交
Set @@autocomiit=0 -- 此时为0
Insert into user values(3,1000) -- 此时不会提交事务
要手动写上commit;这句话,才插入成功
案例三(还原点案例)
事务隔离级别
会影响事务的隔离性
Read uncommitted | read committed | repeatable read(默认) | serializable
------------------------------------------越往后隔离越高,性能越差-------------------->
脏读:一个事务读取到另外一个事务为提交的数据(解决:提交隔离级别)
事务A、B,同时开启事务,事务B修改id为2(未提交),事务A查询后发现id为2,接下来B回滚,B中的id为1(期间A读取到了B之前未提交的事务[2])
不可重复读:同一个事务多次读取发现数据不一样(解决:调整隔离级别->默认)
事务A、B同时开启事务,事务A查询id为1,事务B修改id为2事务提交,事务A查询id为2(A还未提交),即期间出现读取数据不一样现象
幻读:事务A和B,两个事务同时开启,假设当事务B修改主键id为2提交事务后,此时事务A未提交,读取的数据没变(如果变了则回到不可重复读),如果此时也修改id为2,数据库会报错说该id已经存在,但是此时A看不见(解决:隔离级别调最高)
2022.5.20
存储过程
事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应哟服务器之间的传输,对于提高数据处理的效率是有好处的
数据库SQL语言层面的代码封装和重用
变量分类
系统变量
用户变量
局部变量(*)
用户变量
用户定义的,使用时不用提前声明,用的时候直接用‘@变量名’即可,作用域为当前会话,使用=和:=进行赋值
局部变量用在存储过程中,使用的时候需要先定义
定义declare名称 类型[default xx];
设置:set 名称 = value;
set 名称 := value;
select 字段 into 名称 from 表;
select 名称;
用户变量和局部变量的区别?
不用声明且多了@