数据库
数据库索引
数据库索引是按照数据库表一列或者多列的值进行排序的数据结构,主要目的是加速数据访问,类似书的目录。
主要在查询比较多数据量大,规模大的表使用索引
事务
单个逻辑单元的一系列操作,要不全部执行,要不全部撤销,事务的四大特性有ACID,原子性,持久性,一致性,隔离性,是数据库运行的逻辑单位。
四大特性
- 原子性:事务中所有操作,要么全部完成,要么全部失败的回滚
- 一致性:必须使数据库从一个一致性变换到另一个一致性状态,事务执行前和执行后都必须处于一致性状态
- 隔离性:多个用户并发访问数据库时,数据库为每个用户开启的事务不能被其他用户干扰,并发事务要相互隔离。
- 持久性:一个事务一旦被提交了,那么对数据库中的数据改变就是永久的
事务的隔离级别
-
Read Uncommitted(读取未提交)最低隔离级别,一个事务可以读到另一个事务的结果,所有的并发事务都会发生。
-
Read Committed(读取提交内容)只有在事务提交后,其更新结构才会被其他事务看见,可以解决脏读问题。
-
Repeated Read(可重复读) 在一个事务中,对于同一份的数据读取结果总是相同的,无论是否有其他事务进行操作,以及事务是否提交,可以解决脏读,不可重复读。
-
Serialization(可串行化)隔离级别最高,牺牲了系统并发性,可以解决所有并发事务的问题。
隔离级别 脏读 不可重复读 幻读 Read Uncommitted 是 是 是 Read Committed 否 是 是 Repeated Read 否 否 是 Serialization 否 否 否
事务隔离
同一时间,只允许一个事务请求同一数据,不同事物之间彼此没有任何干扰。
等值联接和左联接
左联接返回左表所有记录和右表中联接字段相等的记录
右联接返回右表所有数据和左表中联接字段相等的数据
等值联接返回左右两表中联接字段相等的数据
三大范式
第一范式:当关系模式R的所有属性都不能再分解为更基本的数据单位时。属性不可分。
第二范式:关系模式满足第一范式,并且R的所有非主键属性完全依赖于R的每一个候选关键属性。非主键属性,完全依赖于主键属性
第三范式:属性不依赖于其他非主属性,就是在第二范式的基础上消除了非主属性对键的传递函数依赖。非主键属性无传递依赖
BCNF:消除主属性对候选码的部分和传递函数依赖
SQL优化方式有哪些
通过建立索引对查询进行优化
对查询进行优化,尽量避免全表扫描
常见关系型数据库管理系统产品有
MYSQL,SQL Server, Oracle
SQL语言包含哪几部分
数据定义语言(DDL)
Create ,drop
数据查询语言(DQL)
Select
数据操纵语言(DML)
Insert update Delete
数据控制语言(DCL)
grant revoke 授权和撤销
完整性约束包含哪些
-
实体完整性约束
主属性不能取空值
-
参照完整性约束
外键,一个表是外键,它的值要么是空值,要么和外键所连接表的主键值相同。
-
用户自定义完整性
必须满足语义上的要求
用什么可以确保表格里的字段只接受特定范围的值
check
基本表与视图
基本表就是本身独立的表,一个关系就对应一个基本表。
视图是由一个或几个表导出的表,本身不独立存储,是个虚标。用户对视图的操作并不影响基本表。
视图的优点
可以简化用户操作,用户可以从多角度看待同一数据,视图逻辑独立,视图安全
相关子查询和不相关子查询
嵌套查询中,如果子查询的查询结果不依赖与父查询,称为不相关子查询,如果子查询的查询条件依赖于父查询,称为相关子查询
drop、truncate、delete区别
delete是数据操纵语言,删除表中一行数据
truncate和drop是数据定义语言,truncate是删除表内所有数据,保留表结构,而drop是删除所有
索引优化
索引目的是为了加速查找,两个方面进行优化,选择合适数据结构hash表或者B树。选择合适查找算法,顺序查找,折半查找,分块查找等。
索引优缺点
优点:提高在数据库中获取信息的速度
缺点:要花时间和空间去维护索引表,
主键外键索引的区别
主键:唯一标识一条记录,不能有重复的,不允许为空
外键:可以为空,或是另一个表中主键,一个表可以有多个 外键
索引:索引没有重复值,一个表中可以有多个索引。
什么是触发器
触发器是与表相关的数据库对象,在满足定义条件时触发,并执行触发器定义条件。
什么是游标
SQL的游标是一种临时的数据库对象,即可以用来存放在数据库表中的数据行副本,也可以指向存储在数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。
什么是存储过程,用什么来调用
存储过程类似其他语言的函数,由过程化sql语句书写的过程,这个过程编译优化后存储在数据库中,使用时调用即可。使用CALL和Perform等方式调用
存储过程的优缺点
优点:可以将一段操作的代码封装起来,保存在数据库中,每次使用只需要调用,节约了很多时间,编译后存储在数据库中效率更高。
缺点:每个数据库存储过程语法几乎都不一样,兼容性很差
锁
实现并发控制的一项重要技术,在多个事务同时存取同一组数据时有的封锁机制,作为控制。先加锁,在访问,然后再解锁释放资源
乐观锁与悲观锁
乐观锁,假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。(也就是先把资源分配出去,等操作结束后,查看是否有问题)
悲观锁,假设会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
排它锁和共享锁
x锁和s锁
三级封锁协议
一级封锁,修改时加X锁,事务结束时释放
二级封锁,一级的基础上,在读取时加s锁,读取结束时释放。
三集封锁,一级的基础上,在读取时加s锁,事务结束时释放。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLV5Nk6x-1648555645011)(C:\Users\11028\AppData\Roaming\Typora\typora-user-images\image-20220329195531670.png)]
两段封锁协议
在事务执行过程中,不允许加锁解锁交叉执行。分为申请封锁期和释放封锁期