2021年MySQL⾯试题55道
⽂章⽬录
前⾔
作为应届⽣,处于⼯作中ing。今年2⽉份刚刚整理出来的⾯试题,时间⽐较赶就没有按照模块分类排序了。总⽽⾔之,顺序⽐较乱,希望⼤家耐着性⼦ 看。如果实在介意,评论告知,我会视情况作修改的。另外如果⼤家觉得我的答案不够清晰,欢迎私信或者评论只出,我看到都会去修改的!
⾯试题系列⽂章传送门
MySQL⾯试题内容
1. 简述在MySQL数据库中引擎MyISAM和InnoDB的区别?
1. 存储结构⽅⾯:MyISAM每个MyISAM在磁盘上存储成三个⽂件.frm⽂件存储表定义、数据⽂件的扩展名为.MYD、索引⽂件的扩展名是.MYI;
InnoDB所有的表都保存在同⼀个数据⽂件中,表的⼤⼩只受限于操作系统⽂件的⼤⼩,⼀般为2GB。
2. 存储空间⽅⾯:MyISAM可被压缩,存储空间较⼩。⽀持三种不同的存储格式:静态表、动态表、压缩表;InnoDB需要更多的内存和存储,它会
在主内存中建⽴其专⽤的缓冲池⽤于⾼速缓冲数据和索引。
3. 事务⽀持⽅⾯:MyISAM强调的是性能,每次查询具有原⼦性,其执⾏数度⽐InnoDB类型更快,但是不提供事务⽀持;InnoDB提供事务⽀持事
务。
4. 表锁差异⽅⾯:MyISAM只⽀持表级锁;InnoDB⽀持事务和⾏级锁。
5. 表主键:MyISAM允许没有任何索引和主键的表存在,索引都是保存⾏的地址。InnoDB如果没有设定主键或者⾮空唯⼀索引,就会⾃动⽣成⼀个
6字节的主键。
6. 增删改查操作⽅⾯:如果执⾏⼤量的SELECT,MyISAM是更好的选择。如果执⾏⼤量的INSERT或UPDATE,出于性能⽅⾯的考虑,应该使⽤
InnoDB表。
7. 外键⽅⾯:MyISAM不⽀持;InnoDB⽀持。
2. MySQL中有哪⼏种锁?
表级锁:开销⼩,加锁快;不会出现死锁;锁定粒度⼤,发⽣锁冲突的概率最⾼,并发度最低。
⾏级锁:开销⼤,加锁慢;会出现死锁;锁定粒度最⼩,发⽣锁冲突的概率最低,并发度也最⾼。
页⾯锁:开销和加锁时间界于表锁和⾏锁之间;会出现死锁;锁定粒度界于表锁和⾏锁之间,并发度⼀般。
3. 什么是通⽤SQL函数?
CONCAT(A, B): 连接两个字符串值以创建单个字符串输出。通常⽤于将两个或多个字段合并为⼀个字段。
FORMAT(X, D): 格式化数字 X 到 D 有效数字。
CURRDATE():CURRTIME():返回当前⽇期或时间。
NOW():将当前⽇期和时间作为⼀个值返回。
MONTH():DAY(),YEAR(),WEEK(),WEEKDAY() :从⽇期值中提取给定数据。
HOUR():MINUTE(),SECOND() : 从时间值中提取给定数据。
DATEDIFF(A,B):确定两个⽇期之间的差异,通常⽤于计算年龄
SUBTIMES(A,B):确定两次之间的差异。
FROMDAYS(INT): 将整数天数转换为⽇期值。
4. MySQL中有哪些不同的表格?
MyISAM、Heap、Merge、INNODB、ISAM
5. CHAR和VARCHAR的区别?
CHAR 和 VARCHAR 类型在存储和检索⽅⾯有所不同
CHAR 列长度固定为创建表时声明的长度,长度值范围是1到255当CHAR值被存储时,它们被⽤空格填充到特定长度,检索 CHAR 值时需删除尾随空格。
6. MySQL中InnoDB⽀持的四种事务隔离级别名称,以及逐级之间的区别?
read uncommited :读到未提交数据
read committed:脏读,不可重复读
repeatable read:可重复读
serializable :串⾏事务
7. myisamchk是⽤来做什么的?
它⽤来压缩 MyISAM 表,这减少了磁盘或内存使⽤。
8. 主键和候选键有什么区别?
表格的每⼀⾏都由主键唯⼀标识,⼀个表只有⼀个主键,主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以⽤于任何外键引⽤。
9. 如果⼀个表有⼀列定义为TIMESTAMP,将发⽣什么?
每当⾏被更改时,时间戳字段将获取当前时间戳。
10. 列设置为AUTO INCREMENT时,如果在表中达到最⼤值,会发⽣什么情况?
它会停⽌递增,任何进⼀步的插⼊都将产⽣错误,因为密钥已被使⽤。
11. MySQL 数据库作发布系统的存储,⼀天五万条以上的增量,预计运维三年,怎么优化?
设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提⾼效率。
选择合适的表字段数据类型和存储引擎,适当的添加索引。
MySQL 库主从读写分离。
规律分表,减少单表中的数据量提⾼查询速度。
添加缓存机制,⽐如 memcached,apc 等。
不经常改动的页⾯,⽣成静态页⾯。
书写⾼效率的SQL。⽐如SELECT * FROM TABEL改为SELECT field_1,field_2, field_3 FROM TABLE.
12. 你怎么看到为表格定义的所有索引?
索引是通过以下⽅式为表格定义的:SHOW INDEX FROM ;
13.MySQ ⽀持事务吗?
在缺省模式下,MySQL是autocommit模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,MySQL是不⽀持事务的。但是如果你的MySQL表类型是使⽤ nnoDB Tables或BDB tables的话,你的MySQL就可以使⽤事务处理,使⽤SET
AUTOCOMMIT=0就可以使MySQL允许在⾮autocommit模式,在⾮autocommit模式下,你必须使⽤COMMIT来提交你的更改,或者⽤ROLLBACK来回滚你的更改。
14. 如何在 Unix 和 MySQL 时间戳之间进⾏转换?
UNIX_TIMESTAMP 是从 MySQL 时间戳转换为 Unix 时间戳的命令
FROM_UNIXTIME 是从 Unix 时间戳转换为 MySQL 时间戳的命令
15. 列对⽐运算符是什么?
在 SELECT 语句的列⽐较中使⽤=,<>,<=,<,> =,>,<<,>>,<=>,AND,OR 或 LIKE 运算符。
16. LIKE 声明中的%和_是什么意思?
%对应于 0 个或更多字符,_只是 LIKE 语句中的⼀个字符。
17. MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?
MySQL_fetch_array(): 将结果⾏作为关联数组或来⾃数据库的常规数组返回。
MySQL_fetch_object :从数据库返回结果⾏作为对象。
18. 怎样才能出最后⼀次插⼊时分配了哪个⾃动增量?
LAST_INSERT_ID 将返回由 Auto_increment 分配的最后⼀个值,并且不需要指定表名称。
19. MySQL 如何优化 DISTINCT?
DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY ⼦句结合使⽤。SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
20. 实践中如何优化 MySQL?
最好是按照以下顺序优化:
SQL 语句及索引的优化
数据库表结构的优化
系统配置的优化
硬件的优化
21. 优化数据库的⽅法?
选取最适⽤的字段属性,尽可能减少定义字段宽度,尽量把字段设置 NOTNULL,例如’省份’、’性别’最好适⽤枚举类型ENUM 使⽤连接(JOIN)来代替⼦查询
适⽤联合(UNION)来代替⼿动创建的临时表
事务处理
锁定表、优化事务处理
适⽤外键,优化锁定表
建⽴索引
优化查询语句
unix时间戳转换日期格式22. NOW()和 CURRENT_DATE()有什么区别?
NOW()命令⽤于显⽰当前年份,⽉份,⽇期,⼩时,分钟和秒。
CURRENT_DATE()仅显⽰当前年份,⽉份和⽇期。
23. 简单描述 MySQL 中索引、主键、唯⼀索引、联合索引的区别,对数据库的性能有什么影响(从读写两⽅⾯)?
索引是⼀种特殊的⽂件,包含着对数据表⾥所有记录的引⽤指针。索引可以极⼤的提⾼数据的查询速度,但是会降低插⼊、删除、更新表的速度,因为在执⾏这些写操作时,还要操作索引⽂件。
普通索引的唯⼀任务是加快对数据的访问速度,允许被索引的数据列包含重复的值。
如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该⽤关键字 UNIQUE把它定义为⼀个唯⼀索引,唯⼀索引可以保证数据记录的唯⼀性。
主键是⼀种特殊的唯⼀索引,在⼀张表中只能定义⼀个主键索引,主键⽤于唯⼀标识⼀条记录,使⽤关键字PRIMARY KEY来创建。
联合索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引。
24. 什么是⾮标准字符串类型?
TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
25. BLOB 和 TEXT 有什么区别?
BLOB 是⼀个⼆进制对象,可以容纳可变数量的数据。TEXT 是⼀个不区分⼤⼩写的 BLOB。
BLOB 和 TEXT 类型之间的唯⼀区别在于对 BLOB 值进⾏排序和⽐较时区分⼤⼩写,对 TEXT 值不区分⼤⼩写。
26. 什么是锁?
数据库是⼀个多⽤户使⽤的共享资源,当多个⽤户并发地存取数据时,在数据库中就会产⽣多个事务同时存取同⼀数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的⼀致性。加锁是实现数据库并发控制的⼀个⾮常重要的技术。当事务在对某个数据对象进⾏操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了⼀定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进⾏更新操作。基本锁类型:锁包括⾏级锁和表级锁
27. MySQL 有关权限的表都有哪⼏个?
MySQL 服务器通过权限表来控制⽤户对数据库的访问,权限表存放在 MySQL 数据库⾥,由 MySQL_install_db 脚本初始化。这些权限表分别 user,db,table_priv,columns_priv 和 host。
28. MySQL ⾥记录货币⽤什么字段类型?
NUMERIC 和 DECIMAL 类型被 MySQL 实现为同样的类型,这在 SQL92 标准允许。他们被⽤于保存值,该值的准确精度是极其重要的值,例如与⾦钱有关的数据。当声明⼀个类是这些类型之⼀时,精度和规模的能被(并且通常是)指定。
例如(不⽤背,辅助理解的):
salary DECIMAL(9,2)
在这个例⼦中,9(precision)代表将被⽤于存储值的总的⼩数位数,⽽ 2(scale)代
表将被⽤于存储⼩数点后的位数。
因此,在这种情况下,能被存储在 salary 列中的值的范围是从-9999999.99 到
9999999.99。
29. MyISAM 表格将在哪⾥存储,并且还提供其存储格式?
每个 MyISAM 表格以三种格式存储在磁盘上:·“.frm”⽂件存储表定义·数据⽂件具有“.MYD”(MYData)扩展名索引⽂件具有“.MYI”(MYIndex)扩展名
30. 列的字符串类型可以是什么?
SET、BLOB、ENUM、CHAR、TEXT
31. 完整性约束包括哪些?
数据完整性是指数据的精确和可靠性,分为以下四类:
实体完整性:规定表的每⼀⾏在表中是惟⼀的实体。
域完整性:是指表中的列必须满⾜某种特定的数据类型约束,其中约束⼜包括取值范围、精度等规定。
参照完整性:是指两个表的主关键字和外关键字的数据应⼀致,保证了表之间的数据的⼀致性,防⽌了数据丢失或⽆意义的数据在数据库中扩散。
⽤户定义的完整性:⽤户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某⼀具体应⽤必须满⾜的语义要求。与表有关的约束:包括⾮空约束(NOT NULL)和表约束(PRIMARY KEY、foreign key、check、UNIQUE等等) 。
32. 什么情况下设置了索引但⽆法使⽤?
以“%”开头的 LIKE 语句,模糊匹配
OR 语句前后没有同时使⽤索引
数据类型出现隐式转化(如 varchar 不加单引号的话可能会⾃动转换为 int 型)
33. SQL注⼊漏洞产⽣的原因?如何防⽌?
SQL注⼊产⽣的原因:不注意规范书写sql语句和对特殊字符进⾏过滤,导致客户端可以通过全局变量POST和GE 提交⼀些sql语句正常执⾏。
防⽌SQL注⼊的⽅式:
Sql语句书写尽量不要省略双引号和单引号。
过滤掉sql语句中的⼀些关键词:update、insert、delete、select、 * 。
提⾼数据库表和字段的命名技巧,对⼀些重要的字段根据程序的特点命名,取不易被猜到的。
对于常⽤的⽅法加以封装,避免直接暴漏SQL语句
34. 索引的底层实现原理和优化?
索引的底层实现原理是B+树,优化是经过优化的 B+树。主要是在所有的叶⼦结点中增加了指向下⼀个叶⼦节点的指针,因此InnoDB 建议为⼤部分表使⽤默认⾃增的主键作为主索引。
35. 数据库中的事务是什么?
事务是作为⼀个单元的⼀组有序的数据库操作,事务的特性在Spring框架中可分为ACID。如果组中的所有操作都成功,则认为事务成功,即使只有⼀个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作⽤于所有其他数据库进程。如果⼀个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
36. MyISAM Static 和 MyISAM Dynamic 有什么区别?
在 MyISAM Static 上的所有字段有固定宽度。动态 MyISAM 表将具有像 TEXT,BLOB 等字段,以适应不同长度的数据类型。
MyISAM Static 在受损情况下更容易恢复。
37. 如何显⽰前 50 ⾏?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论