数据库面试题
什么是主键?什么是外键?
主键:唯一标识一条记录的字段或字段的组合称为主键。
主键不能重复,也不允许为空
外键:用来维护两个表之间数据的一致性,。
外键可以有重复的, 也允许有空值
作用:
主键:用来保证数据完整性,保证记录的唯一性
外键:通过设置外键和其他表建立关联关系(一对一,一对多,多对多)
SQL语句的执行顺序:
from>>on>>join>>where>>group by >>having>>select>>distinct>>order by >>limit
drop、delete与truncate的区别
drop 用于删除结构:数据库、表
delete 删除数据,可以回滚
truncate 删除结构重建构建,不可以回滚
基于mysql
delete不重置自动增长列的计数值
truncate重置自动增长列的计数值
mysql数据库支持的约束,并说明它们的使用场景
- 主键约束:在主键上使用
- 外键约束:建立俩个表之间的关系时使用
- 唯一约束:保证数据表中某个字段数据的唯一性时使用
- 非空约束:需要保证数据库字段值不为空时使用
- 自动增长列:数据值自增时使用,字段类型必须是整数,且必须使用主键修饰。
数据库连接池的作用
作用:
1.资源重用,避免了数据库连接频繁建立、关闭的开销
2.更快的系统响应速度,直接从连接池中获取连接,响应速度加快
3.控制资源的使用,连接池能自动维护池中的连接数量,提高资源的利用率。
常用的数据库连接池:DBCP、C3P0、Druid
什么是数据库事务
事务:业务中的一组操作,要么全部成功,要么全部失败,不可分割的工作单位。
数据库事务的四大特性
数据库事务的四大特性为:ACID,分别是原子性、一致性、隔离性和持久性
原子性:不可分割的工作单位,操作要么全部成功,要么全部失败;
一致性:一个事务执行前后,表中数据必须保持一致。比如:如果从A账户转账到B账户,不可能因为A账户扣了钱,而B账户没有加钱;
隔离性:事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰;
持久性:事务一旦提交后,数据库中的数据必须被永久的保存下来。
事务并发访问会产生的问题
脏读:一个事务读取到了另一个事务中尚未提交的数据
不可重复读:一个事务读取到了另一个事务中已经提交的数据,通常为update时引发的问题
幻读:一个事务读取到了另一个事务中已经提交的数据,通常为insert或delete时引发的问题
事务的四种隔离级别
读未提交:任何问题都没有解决;
读已提交:解决了脏读问题;
可重复读:解决了脏读和不可重复读问题;
串行化:解决了脏读、不可重复读和幻读问题。
MySQL是怎么管理事务的
操作开始前开启事务,操作成功完成提交事务,操作失败回滚事务。
开启事务:start transaction
提交事务:commit
回滚事务:rollback
对事务的保存点理解
在事务的处理过程中,业务操作执行了一部分,可以记录一个保持点,程序继续执行,如果程序出现异常,可以回滚所有,也可以回滚到保持点,从而保证已经执行的部分操作可以进行事务的提交。
事务的保存点,类似单击游戏的存档和读档:
1、如果没有游戏的存档功能,每次玩单机游戏都会从第一关重新开始。
2、如果使用了游戏的存档功能,下次在玩游戏时,就会从存档处开始。
什么是索引?
索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。
索引的实现通常使用B树及其变种B+树。
索引相当于字典的目录,作用在于提升查询效率。
索引的分类
据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。
唯一索引:不允许其中任何两行具有相同索引值的索引。
主键索引:在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。聚集索引通常提供更快的数据访问速度。
索引的优缺点
索引的优点:
- 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性;
- 可以大大加快数据的检索速度,这也是创建索引的最主要的原因;
索引的缺点: - 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;
- 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大;
- 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度
参考:https://blog.csdn.net/u013310119/article/details/52527632
什么情况应该使用索引?什么情况下又不应该使用?
适用场景:
- 加快条件的判断速度;
- 在作为主键的列上,强制该列唯一
- 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
- 在经常需要排序的列上创 建索引,因为索引已经排序
不适用场景:
- 查询少的列
- 数据内容少的列
- text, image和bit数据类型的列不应该增加索引
- 修改多于查询的列不能加索引。
主键(primary key)和唯一索引(unique index)区别
1, 主键一定是唯一性索引,唯一性索引并不一定就是主键。
2, 一个表中可以有多个唯一性索引,但只能有一个主键。
3, 主键列不允许空值,而唯一性索引列允许空值。
注意:唯一索引也称为唯一约束