MySQL面试题
1.主键,外键,超键,候选键
2.数据库事务的四个特征及含义
3.视图有什么作用?它可以更改吗?
视图是虚拟的表;只包含动态检索数据的查询,不包含数据;简化操作,隐藏细节,保护数据;对视图的更新会作用于基表,一般不更新;
4.drop,delete和truncate 的区别
drop:删除表;不能回滚
delete:结合where删除数据;会记录日志用于回归;会触发触发器;不减少索引和表的空间
truncate:清空表;不记录单行删除日志;无法恢复;只能对于TABLE操作;不能在带FOREIGN KEY约束的表(被引用的表)中使用;计数从头开始;
5.索引的工作原理和其种类
索引的实现通常采用B树或B+树,加快查询速度也消耗更多空间
6.连接的种类
7.数据库范式
8.存储过程与触发器的区别
存储过程和触发器都是SQL语句集;触发器不可用CALL调用,而是在用户执行某些语句后自动调用;
9.分表与分区
10.数据库隔离级别
11.MYSQL的两种存储引擎
myisam innodb
12.MYSQL索引算法
hash btree
HASH | 适合等值查找,不适合范围,不能排序 |
BTREE | 适合范围查找,无hash冲突 |
13.聚集索引和非聚集索引
14.索引的优缺点
15.两种存储引擎索引的区别
16.数据库的主从复制
一个服务器作为主服务器,一个或多个服务器作为从服务器,主服务器将更新写到二进制日志,当一个从服务器连接到主服务器时,通知主服务器读取日志,接收从那时起发生的所有更新。解决:数据分布,负载平衡,备份,高可用性和容错性
基于语句 | 在主服务器上执行的语句,在从服务器上也执行 |
基于行 | 将改变的内容复制过去 |
混合类型 | 语句复制失败时采用行的形式 |
17.数据库连接池
为数据库连接建立一个缓冲池,防止过于大量的连接的建立与管理;
18.存储过程
存储过程是一些预编译的SQL语句,执行效率较高
19.乐观锁和悲观锁
乐观锁 | 假定不会发生并发冲突,只在提交时检查,若有其他数据更新了数据,则回滚;使用数据版本标示数据(时间戳,版本号) |
悲观锁 | 假定会发生并发冲突,屏蔽一切破坏数据库一致性的操作,主要用于数据争用激烈的环境,以及锁成本低于回滚成本时;排他锁; |
20. innodb的事务与日志的实现方式
1)有多少种日志
错误日志:记录出错信息,也记录一些警告信息或者正确的信息。
查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行
慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。
二进制日志:记录对数据库执行更改的所有操作。
中继日志
事务日志:
2)事物的4种隔离级别
读未提交(RU)
读已提交(RC)
可重复读(RR)
串行
3)事务是如何通过日志来实现的
事务日志是通过redo和innodb的存储引擎日志缓冲(Innodb log buffer)来实现的,当开始一个事务的时候,会记录该事务的lsn(log sequence number)号; 当事务执行时
会往InnoDB存储引擎的日志的日志缓存里面插入事务日志;当事务提交时,必须将存储引擎的日志缓冲写入磁盘(通过innodb_flush_log_at_trx_commit来控制),也就是写数
据前,需要先写日志。这种方式称为“预写日志方式”。