视图

即sql语句的封装,本身不保存数据,数据来自基础表或者其他视图

mysql实验实训方案 mysql实训内容_mysql实验实训方案

  1. 查看表结构:desc v(视图名字)
  2. 删除视图:drop view v(视图名字)

为什么使用视图?

  1. 限制其他用户对数据库表的访问,因为视图可以有选择性的显示数据表的一部分
  2. 容易实现复杂的查询
  3. 对于相同的数据可以产生不同的视图

事务特征ACID

  1. 原子性(Atomicity)

事务是不能分割的最小单位

  1. 一致性(Consistency)

事务完成之后数据保持一致

  1. 隔离性(solation)

事务之间互不影响【和隔离级别有关系】

  1. 持久性(Durabiity)

断电之后重启数据还是事务完成时候的状态

mysql实验实训方案 mysql实训内容_sql_02

 

 

如何操作事务

方式一

begin\commit\rollback(回滚到开始状态)

方式二

Set @@autocommit=0/Commit/rollback

mysql实验实训方案 mysql实训内容_mysql实验实训方案_03

 

案例一

mysql实验实训方案 mysql实训内容_mysql_04

 

mysql实验实训方案 mysql实训内容_mysql实验实训方案_05

 

mysql实验实训方案 mysql实训内容_sql_06

rollback事务回滚到begin位置,

案例二

-- 获取当前会话事务是否自动提交

Select @@autocomiit -- 0不自动提交 1自动提交

Set @@autocomiit=0 -- 此时为0

Insert into user values(3,1000) -- 此时不会提交事务

要手动写上commit;这句话,才插入成功

案例三(还原点案例)

mysql实验实训方案 mysql实训内容_数据库_07

 

事务隔离级别

会影响事务的隔离性 

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看不见(解决:隔离级别调最高)

mysql实验实训方案 mysql实训内容_mysql_08

mysql实验实训方案 mysql实训内容_数据库_09

2022.5.20

存储过程

事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应哟服务器之间的传输,对于提高数据处理的效率是有好处的

数据库SQL语言层面的代码封装和重用

mysql实验实训方案 mysql实训内容_数据_10

mysql实验实训方案 mysql实训内容_mysql实验实训方案_11

 

变量分类

系统变量

用户变量

局部变量(*)

用户变量

用户定义的,使用时不用提前声明,用的时候直接用‘@变量名’即可,作用域为当前会话,使用=和:=进行赋值

mysql实验实训方案 mysql实训内容_sql_12

局部变量用在存储过程中,使用的时候需要先定义

定义declare名称 类型[default xx];

设置:set 名称 = value;

set 名称 := value;

select 字段 into 名称 from 表;

select 名称;

用户变量和局部变量的区别?

不用声明且多了@

mysql实验实训方案 mysql实训内容_sql_13