01 数据库历年高频真题梳理
- 1、MySQL 中有哪几种锁?
- 2、MySQL 中有哪些不同的表格?
- 3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
- 4、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
- 5、CHAR 和 VARCHAR 的区别?
- 6、主键和候选键有什么区别?
- 7、myisamchk 是用来做什么的?
- 8、如果一个表有一列定义为 TIMESTAMP,将发生什么?
- 9、你怎么看到为表格定义的所有索引?
- 10、LIKE 声明中的%和_是什么意思?
- 11、列对比运算符是什么?
- 12、BLOB 和 TEXT 有什么区别?
- 13、MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?
- 14、MyISAM 表格将在哪里存储,并且还提供其存储格式?
- 15、MySQL 如何优化 DISTINCT?
- 16、如何显示前 50 行?
- 17、可以使用多少列创建索引?
- 18、NOW()和 CURRENT_DATE()有什么区别?
- 19、什么是非标准字符串类型?
- 20、什么是通用 SQL 函数?
- 21、MySQL 支持事务吗?
- 22、MySQL 里记录货币用什么字段类型好
- 23、MySQL 有关权限的表都有哪几个?
- 24、列的字符串类型可以是什么?
- 25、MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
- 26、锁的优化策略
- 27、索引的底层实现原理和优化
- 28、什么情况下设置了索引但无法使用
- 29、实践中如何优化 MySQL
- 30、优化数据库的方法
- 31、简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)
- 32、数据库中的事务是什么?
- 33、SQL 注入漏洞产生的原因?如何防止?
- 34、为表中的字段选择合适得数据类型
- 35、存储时期
- 36、对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题:
- 37、解释 MySQL 外连接、内连接与自连接的区别
- 38、Myql 中的事务回滚机制概述
- 39、SQL 语言包括哪几部分?每部分都有哪些操作关键字?
- 40、完整性约束包括哪些?
- 41、什么是锁?
- 42、什么叫视图?游标是什么?
- 43、什么是存储过程?用什么来调用?
- 44、如何通俗地理解三个范式?
- 45、什么是基本表?什么是视图?
- 46、试述视图的优点?
- 47、 NULL 是什么意思
- 48、主键、外键和索引的区别?
- 49、你可以用什么来确保表格里的字段只接受特定范围里的值?
- 50、说说对 SQL 语句优化有哪些方法?(选择几条)
1、MySQL 中有哪几种锁?
· 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
· 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
· 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
2、MySQL 中有哪些不同的表格?
共有 5 种类型的表格:
· MyISAM
· Heap
· Merge
· INNODB
· ISAM
3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
MyISAM:
· 不支持事务,但是每次查询都是原子的;
· 支持表级锁,即每次操作是对整个表加锁;
· 存储表的总行数;
· 一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件;
· 采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。
InnoDb:
· 支持 ACID 的事务,支持事务的四种隔离级别;
· 支持行级锁及外键约束:因此可以支持写并发;
不存储总行数:
一个 InnoDb 引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为 2G),受操作系统文件大小的限制;
主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持 B+树结构,文件的大调整。
4、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
SQL 标准定义的四个隔离级别为:
- 1. read uncommited :读到未提交数据
- 2. read committed:脏读,不可重复读
- 3. repeatable read:可重读
- 4. serializable :串行事物
5、CHAR 和 VARCHAR 的区别?
- 1. CHAR 和 VARCHAR 类型在存储和检索方面有所不同
- 2. CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255 当 CHAR值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格。
由于篇幅有限,这里就不一一列出所有的答案了,下面还要为大家展示一下MySQL的学习笔记及书籍,这份数据库历年高频真题梳理已整理成Word文档,有需要的小伙伴可以【“点我免费领取”】
数据库历年高频真题梳理02 数据库学习笔记及书籍
(1)MySQL学习高频知识点
- 1、事务四大特性(ACID)原子性、一致性、隔离性、持久性?
- 2、事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?
- 3、MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别?
- 4、MySQL的MyISAM与InnoDB两种存储引擎在,事务、锁级别,各自的适用场景?
- 5、查询语句不同元素(where、jion、limit、group by、having等等)执行先后顺序?
- 6、什么是临时表,临时表什么时候删除?
- 7、MySQL B+Tree索引和Hash索引的区别?
- 8、sql查询语句确定创建哪种类型的索引?如何优化查询?
- 9、聚集索引和非聚集索引区别?
- 10、有哪些锁(乐观锁悲观锁),select 时怎么加排它锁?
- 11、非关系型数据库和关系型数据库区别,优势比较?
- 12、数据库三范式,根据某个场景设计数据表?
- 13、数据库的读写分离、主从复制,主从复制分析的 7 个问题?
- 14、使用explain优化sql和索引?
- 15、MySQL慢查询怎么解决?
- 16、什么是 内连接、外连接、交叉连接、笛卡尔积等?
- 17、mysql都有什么锁,死锁判定原理和具体场景,死锁怎么解决?
- 18、varchar和char的使用场景?
- 19、mysql 高并发环境解决方案?
- 20、数据库崩溃时事务的恢复机制(REDO日志和UNDO日志)?
1、事务四大特性(ACID)原子性、一致性、隔离性、持久性?
原子性(Atomicity)
· 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
一致性(Consistency)
· 事务开始前和结束后,数据库的完整性约束没有被破坏。比如A向B转账,不可能A扣了钱,B却没收到。
隔离性(Isolation)
· 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。 持久性(Durability)
· 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
2、事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?
从理论上来说, 事务应该彼此完全隔离, 以避免并发事务所导致的问题,然而, 那样会对性能产生极大的影响, 因为事务必须按顺序运行, 在实际开发中, 为了提升性能, 事务会以较低的隔离级别运行, 事务的隔离级别可以通过隔离事务属性指定。
2.1事务的并发问题
(1)脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
(2)不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。
(3)幻读:幻读解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。
例如:事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作 这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。 而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有跟没有修改一样,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。
2.2事务的隔离级别
image.png-
读未提交:另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据脏读
-
不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。
-
可重复读:在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象
-
串行化:最高的隔离级别,在这个隔离级别下,不会产生任何异常。并发的事务,就像事务是在一个个按照顺序执行一样
2.3 MySQL默认的事务隔离级别为repeatable-read
· MySQL 支持 4 中事务隔离级别.
· 事务的隔离级别要得到底层数据库引擎的支持, 而不是应用程序或者框架的支持.
· Oracle 支持的 2 种事务隔离级别:READ_COMMITED , SERIALIZABLE
2.3补充
1. SQL规范所规定的标准,不同的数据库具体的实现可能会有些差异
2. MySQL中默认事务隔离级别是“可重复读”时并不会锁住读取到的行
· 事务隔离级别:未提交读时,写数据只会锁住相应的行。
· 事务隔离级别为:可重复读时,写数据会锁住整张表。
· 事务隔离级别为:串行化时,读写数据都会锁住整张表。
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
MySQL学习高频知识点(2)MySQL学习路线图(xmind)
MySQL学习路线图(3)MySQL学习书籍:MySQL+技术内幕:InnoDB存储引擎-3.pdf
MySQL学习书籍:MySQL+技术内幕:InnoDB存储引擎-3.pdf
03 数据库性能优化
(1)MySQ性能优化21个最佳实践
- 1、为查询缓存优化你的查询
- 2、EXPLAIN你的SELECT查询
- 3、当只要一行数据时使用LIMIT 1
- 4、为搜索字段建索引
- 5、在Join表的时候使用相当类型的例,并将其索引
- 6、千万不要 ORDER BY RAND()
- 7、避免 SELECT *
- 8、永远为每张表设置一个 ID
- 9、使用 ENUM 而不是 VARCHAR
- 10、从 PROCEDURE ANALYSE() 取得建议
- 11、尽可能的使用 NOT NULL
- 12、Prepared Statements
- 13、无缓冲的查询
- 14、把 IP 地址存成 UNSIGNED INT
- 15、固定长度的表会更快
- 16、垂直分割
- 17、拆分大的 DELETE 或 INSERT 语句
- 18、越小的列会越快
- 19、选择正确的存储引擎
- 20、使用一个对象关系映射器(Object Relational Mapper)
- 21、小心“永久链接”
(2)MySQL优化问题学习路线图(xmind)
MySQL优化问题学习路线图(xmind)最后的最后:读者彩蛋
今天关于备战春招之MySQL就分享这么多,如果你对文中提到的各种数据库学习资料感兴趣,可以点击下面的链接进去石墨文档免费领取,让我们一起备战春招吧!
《免费获取:java架构专题+数据库+算法+Redis+中间件+JVM+大厂面试真题(含解析)+学习视频+学习书籍+学习思维导图...》
性能优化问题汇总最后说到性能优化问题,前些日子还总结了一波MySQL+Tomcat+JVM的性能优化问题汇总,这里也一起分享出来给大家学习参考一下下!!
网友评论