说明:
- 面试群,群号: 228447240
- 面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);
- 文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但在这里博主希望每一个题目,大家都要经过认真思考,答案不重要,重要的是通过题目理解所考知识点,好应对题目更多的变化;
- 博主与大家一起学习,一起刷题,共同进步;
- 写文不易,麻烦给个三连!!!
目录
6.触发器分为事前触发和事后触发,这两种触发有何区别。语句级触发和行级触发有何区别。
7.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现?
11.你了解MySQL的内部构造吗?一般可以分为哪两个部分?
12.说一说Drop、Delete与Truncate的共同点和区别
13.MySQL优化了解吗?说一下从哪些方面可以做到性能优化?
15.都知道数据库索引采用B+树而不是B树,原因也有很多,主要原因是什么?
1.关系型和非关系型数据库的区别你了解多少?
答案:
- 容易理解。因为它采用了关系模型来组织数据。
- 可以保持数据的一致性。
- 数据更新的开销比较小。
- 支持复杂查询(带where子句的查询)
- 不需要经过SQL层的解析,读写效率高。
- 基于键值对,数据的扩展性很好。
- 可以支持多种类型数据的存储,如图片,文档等等。
2.什么是非关系型数据库?
答案:
- 日志系统
- 地理位置存储
- 数据量巨大
- 高可用
3.存储过程和函数的区别
答案:
存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
4.事务是什么?
答案:
事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能称为一个事务:
原子性
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
隔离性
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
5.游标的作用?如何知道游标已经到了最后?
答案:
游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。
6.触发器分为事前触发和事后触发,这两种触发有何区别。语句级触发和行级触发有何区别。
答案:
事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。
语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。
7.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现?
答案:
将操作多个表的操作放入到事务中进行处理。
8.触发器怎么工作的?
答案:
触发器主要是通过事件进行触发而被执行的,当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,数据库就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
9.为什么使用索引?
答案:
- 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
- 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
- 帮助服务器避免排序和临时表
- 将随机IO变为顺序IO。
- 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
10.Innodb为什么要用自增id作为主键?
答案:
11.你了解MySQL的内部构造吗?一般可以分为哪两个部分?
答案:
12.说一说Drop、Delete与Truncate的共同点和区别
答案:
- Delete用来删除表的全部或者一部分数据行,执行delete之后,用户需要提交(commmit)或者回滚(rollback)来执行删除或者撤销删除,会触发这个表上所有的delete触发器。
- Truncate删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,TRUNCATE比delete更快,占用的空间更小。
- Drop命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被触发,这个命令也不能回滚。
总结:
1.Drop直接删掉表;
2.Truncate删除表中数据,再插入时自增长id又从1开始 ;
3.Delete删除表中数据,可以加where字句。
13.MySQL优化了解吗?说一下从哪些方面可以做到性能优化?
答案:
- 为搜索字段创建索引
- 避免使用 Select *,列出需要查询的字段
- 垂直分割分表
- 选择正确的存储引擎
14.数据库隔离级别
答案:
15.都知道数据库索引采用B+树而不是B树,原因也有很多,主要原因是什么?
答案: