MySQL中的自连接,子查询,合并查询和索引,事务概念

1.自连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
a》求所有计算机组成原理比java成绩高的同学id。
1>先找到计算机组成原理和java课程的id
在这里插入图片描述
2>根据id再成绩表中进行筛选
在这里插入图片描述
在这里插入图片描述

2.子查询

单行子查询(子查询的结果只有一种)
a》查询和“不想毕业”同班的同学有哪些
在这里插入图片描述
在这里插入图片描述
多行查询
a》查询语文或者英文对应的成绩
1>借助in在这里插入图片描述
在这里插入图片描述
2>借助exists
在这里插入图片描述

3.合并查询

把多个查询的结果集合合并成一个集合(需保证多个结果集之间的字段类型和数目都得一致)

a》查询id<3或者名字为英文的课程
1>用or
在这里插入图片描述
2>用union
在这里插入图片描述
(如果两个查询中有相同的记录,只会保留一个,如果不想去重,可以使用union all)

4.索引

索引:相当于目录

如果没有索引,我们在查找的时候,就需要把整个表遍历一遍,相当于“顺序表”。数据库的数据是在磁盘上。磁盘访问速度比较慢,并且数据量也可能很多,这个速度就会很慢,索引就可以很好解决这一点。

索引可以考虑的数据结构:
1.二叉搜索树:查找效率O(logN)
2.哈希表 查找效率是O(1)

但是哈希表只能进行一些相等的判断查询,对于一些查询某一范围内的数据,是不行的。但是对于二叉搜索树,她的中序遍历结果是有序的,假如查询[a,b]范围内的数据,可以先找到a,再找到b,中序遍历a,b之间的结果就是想要的数据。但是当数据量比较大的时候,最终操作效率也会越低。

真实的索引结构是一种N叉搜索树:B+树
在这里插入图片描述

每个节点是N叉,每个节点也可以存多个数据
每个节点的度=存的数据个数+1。
在这里插入图片描述

4和8两个数据把整个数据集切分为3部分,比4小,比4大比5小,比5大三部分,此时就相当于N分查找,比二分查找还快。

B+树的真实索引结构:
在这里插入图片描述
相比B树:
1.每一层元素之间都链接一起了
2.数据只再叶子节点上保存,非叶子节点只保存一些辅助查找的边界信息。

这里的叶子节点放到磁盘上,非叶子节点放到内存中,查找效率就更高了。(减少了读磁盘次数)

其实索引本质也就是使用空间来换时间。

加在主键上的索引和其他列的索引是截然不同的。
主键索引的叶子节点存的是数据的完整记录,其他索引的叶子节点存的是主键的id

查看索引:
在这里插入图片描述

创建索引:
在这里插入图片描述

删除索引:
在这里插入图片描述

5.事务

把一组操作封装在一起,成为了一个共同的执行单元。

基本特性:
ACID
1.原子性:事务中的若干操作,要么全部成功,要么就全不执行。(假如中间某个步骤出错,就把之前执行的步骤给回滚回去)

2.一致性:执行事务前后,数据一致出于一种合法的状态。

3.持久性:事务一旦执行完毕,此时对于数据的修改就是持久生效的(写入磁盘了,数据存到内存就是不持久的,重启就没了)

4.隔离性:涉及并发执行事务,比较复杂

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章