【mysql】实训笔记

本文介绍了数据库中的视图概念,强调其作为SQL语句封装的作用,用于数据访问控制和复杂查询。事务的ACID特性——原子性、一致性、隔离性和持久性被详细阐述,并展示了事务操作与回滚的实例。此外,讨论了事务隔离级别及其影响,如脏读、不可重复读和幻读问题。存储过程作为预编译的SQL集合,提高了数据处理效率。最后,提到了用户变量和局部变量的使用及区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视图

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

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

为什么使用视图?

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

事务特征ACID

  1. 原子性(Atomicity)

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

  1. 一致性(Consistency)

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

  1. 隔离性(solation)

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

  1. 持久性(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 名称;

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

不用声明且多了@

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值