2021-08-04 DQL(数据查询语言)、视图、事务

-- 多条件查询

-- 实现分页查询

SELECT

 studentNo,studentName,sex,gradeId,phone,address,bornDate,email,identityCard,count(1)

FROM

 student

WHERE 1 = 1

AND studentNo LIKE '%%'

AND studentName like '%文%'

AND phone LIKE '%78%'

AND address LIKE '%%'

LIMIT 0,5

使用 limit分页  count()函数统计

-- 视图(view):

-- 是一种虚拟表,同真实表一样,由行和列构成,但是视图并不实际存在 于数据库中

-- 行和列的数据都来自于查询真实的表中,并且是使用视图实时动态的生成的

-- 数据中只存在视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询的真实表中。

-- 使用视图时,数据库会从真实的表中取出相应的数据

-- 所以视图中数据依赖于真实表中的数据,一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变

-- 1、视图不是数据库中的真实表 而是一张虚拟表,其结构和数据是建立在对真实表的查询基础上的

-- 2、视图在数据库中的查询操作SQL 语句定义了视图的内容,列数据和行数据都是来自于查询所以引用的真实表

-- 3、视图中没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中

-- 4、视图是数据的窗口、而表是内容,表是实际的数据存放单位,而视图只是以不同的方式展示数据,其数据来源还是真实表

-- 5、视图是一种查看数据表的一种方法,可以查询数据表中“某些字段构成数据”只是一些SQL的集合,从安全角度来看,视图的安全性更高

-- 使用视图用户不会直接接触到数据,不会知道真实的表结构

-- 6、视图的建立和删除只影响视图本身,不影响真实表

-- 视图的优点: 视图与表本质上来说是不相同的,但是视图经过定义以后结构和形式和表一样的

-- 可以进行查询 修改 更新 删除等操作

--

-- 1、可以定制数据,聚焦特定的数据

-- 2、简化数据的操作

-- 3、提高安全性

-- 4、共享所需数据

-- 5、更改数据的格式

-- 6、重用SQL语句

-- 视图是对于查询语句的封装,本身是不包含数据

-- CREATE VIEW 视图名称

-- AS

-- 查询语句

CREATE VIEW view_student_grade

AS

SELECT student.studentNo,student.studentName,grade.gradeName,student.sex,student.address

FROM student

JOIN grade ON student.gradeId = grade.gradeID

-- 查询视图

SELECT * FROM view_student_grade

-- 修改视图中的数据

UPDATE view_student_grade SET studentName = '李四' WHERE studentNo = 1011

-- 查看被影响的数据

SELECT * FROM student

-- 修改视图

ALTER VIEW view_student_grade

AS

SELECT grade.gradeID,grade.gradeName,student.sex AS stuSex,
        
       COUNT(student.studentNo) AS count

FROM student RIGHT JOIN grade on grade.gradeID = student.gradeId

GROUP BY grade.gradeId,student.sex

#视图嵌套

CREATE VIEW view_view_student_grade

AS

SELECT * FROM view_student_grade

SELECT * FROM view_view_student_grade

DROP VIEW view_view_student_grade

-- 有些结果会使视图不可更新

-- 聚合函数 SUM MAX MIN COUNT

-- DISTINCT

-- GROUP BY

-- HAVING

-- UNION 或 UNION ALL

-- FROM 子句中包含多个表

-- 事务

-- 事务必须具备以下四个属性,简称ACID 属性

-- 原子性(Atomicity)

-- 一致性(Consistency)

-- 隔离性(Isolation)

-- 持久性(Durability)

-- 原子性(Atomicity)

-- 原子性是指一个事务是不可分割的工作单元,其中的操作要么都做要么都不做,如果事务中一个SQL语句失败了,则全部回滚(数据库退回到事务执行前的状态)

-- 持久性(Durability)

-- 持久性是指事务一旦提交,它对数据库的影响是永久性的,接下来的操作和故障不应该对齐有影响

-- 隔离性(Isolation)

-- 与原子性和持久性侧重研究事务本身不用,隔离性是指不同的事务之间相互的影响。

-- 事务的内部操作与其他事务是隔离的,不能相互干扰

-- 一致性

-- 是指事务必须使数据库从一个一致状态改变为另一个一致状态,也就是说一个事务的执行致之前和执行之后都必须处于一致状态

SET AUTOCOMMIT = 0; # 关闭自动提交模式

START TRANSACTION; -- 开启事务

SELECT gradeName from grade WHERE gradeID =16;

UPDATE grade set gradeName = '研一' WHERE gradeID =16;

SELECT gradeName from grade WHERE gradeID =16;

ROLLBACK; -- 回滚

-- COMMIT; -- 提交

SET AUTOCOMMIT = 1; # 开启自动提交模式

-- 事务隔离级别

-- 几个概念

脏读:一个事务两次读取一个数据的中间发生了另一个事务对数据的更新并未提交。

不重复读:一个事务两次读取一个数据的中间发生了另一个事务对相同数据的更新并提交。

幻读 一个事务两次读取一组数据的中间发生了另一个事务对数据的新增并提交

-- 四种事务隔离级别

-- 级别越低隔离性越差,系统的开销越低,可支持的并发越高,但是隔离越差。隔离级别与读问题。

隔离级别

可能发生的情况

读未提交

脏读

不可重复读

幻读

读已提交

不可重复读

幻读

可重复读

幻读

可串行化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值