2020年MySQL数据库⾯试题总结(50道题含答案解析)1、MySQL 中有哪⼏种锁?
(1)表级锁:开销⼩,加锁快;不会出现死锁;锁定粒度⼤,发⽣锁冲突的概率最⾼,并发度
最低。
(2)⾏级锁:开销⼤,加锁慢;会出现死锁;锁定粒度最⼩,发⽣锁冲突的概率最低,并发度
也最⾼。
(3)页⾯锁:开销和加锁时间界于表锁和⾏锁之间;会出现死锁;锁定粒度界于表锁和⾏锁之
间,并发度⼀般。
2、MySQL 中有哪些不同的表格?
共有 5 种类型的表格:
(1)MyISAM
php include漏洞(2)Heap
大型食肉植物
(3)Merge
(4)INNODB
mysql面试题基础知识
(5)ISAMjq animate
3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
MyISAM:
(1)不⽀持事务,但是每次查询都是原⼦的;
(2)⽀持表级锁,即每次操作是对整个表加锁;
(3)存储表的总⾏数;
(4)⼀个 MYISAM 表有三个⽂件:索引⽂件、表结构⽂件、数据⽂件;
(5)采⽤菲聚集索引,索引⽂件的数据域存储指向数据⽂件的指针。辅索引与主索引基本⼀
致,但是辅索引不⽤保证唯⼀性。
InnoDb:
(1)⽀持 ACID 的事务,⽀持事务的四种隔离级别;
(2)⽀持⾏级锁及外键约束:因此可以⽀持写并发;
(3)不存储总⾏数:
(4)⼀个 InnoDb 引擎存储在⼀个⽂件空间(共享表空间,表⼤⼩不受操作系统控制,⼀个表可能分布在多个⽂件⾥),也有可能为多个(设置为独⽴表空,表⼤⼩受操作系统⽂件⼤⼩限制,⼀般为 2G),受操作系统⽂件⼤⼩的限制;
(5)主键索引采⽤聚集索引(索引的数据域存储数据⽂件本⾝),辅索引的数据域存储主键的值;因此从辅索引查数据,需要先通过辅索引到主键值,再访问辅索引;最好使⽤⾃增主键,防⽌插⼊数据时,为维持 B+树结构,⽂件的⼤调整。
4、MySQL 中 InnoDB ⽀持的四种事务隔离级别名称,以及逐级之间的区别
SQL 标准定义的四个隔离级别为:
(1)read uncommited :读到未提交数据
(2)read committed:脏读,不可重复读
(3)repeatable read:可重读
(4)serializable :串⾏事物
getresources方法5、CHAR 和 VARCHAR 的区别?
(1)CHAR 和 VARCHAR 类型在存储和检索⽅⾯有所不同
(2)CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255 当 CHAR值被存储时,它们被⽤空格填充到特定长度,检索 CHAR 值时需删除尾随空格。
6、主键和候选键有什么区别?
表格的每⼀⾏都由主键唯⼀标识,⼀个表只有⼀个主键。
主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以⽤于任何外键引⽤。7、myisamchk 是⽤来做什么的?
它⽤来压缩 MyISAM 表,这减少了磁盘或内存使⽤。
MyISAM Static 和 MyISAM Dynamic 有什么区别?
在 MyISAM Static 上的所有字段有固定宽度。动态 MyISAM 表将具有像 TEXT,BLOB 等字段,以适应不同长度的数据类型。
MyISAM Static 在受损情况下更容易恢复。
8、如果⼀个表有⼀列定义为TIMESTAMP,将发⽣什么?
每当⾏被更改时,时间戳字段将获取当前时间戳。
列设置为 AUTO INCREMENT 时,如果在表中达到最⼤值,会发⽣什么情况?
它会停⽌递增,任何进⼀步的插⼊都将产⽣错误,因为密钥已被使⽤。
怎样才能出最后⼀次插⼊时分配了哪个⾃动增量?
LAST_INSERT_ID 将返回由 Auto_increment 分配的最后⼀个值,并且不需要指定表名称。
9、你怎么看到为表格定义的所有索引?
索引是通过以下⽅式为表格定义的:
SHOW INDEX FROM <tablename>;
10、LIKE 声明中的%和_是什么意思?
%对应于 0 个或更多字符,_只是 LIKE 语句中的⼀个字符。
如何在 Unix 和 MySQL 时间戳之间进⾏转换?
UNIX_TIMESTAMP 是从 MySQL 时间戳转换为 Unix 时间戳的命令
FROM_UNIXTIME 是从 Unix 时间戳转换为 MySQL 时间戳的命令
11、列对⽐运算符是什么?
在 SELECT 语句的列⽐较中使⽤=,<>,<=,<,> =,>,<<,>>,<=>,AND,OR 或 LIKE
运算符。
12、BLOB 和 TEXT 有什么区别?
BLOB 是⼀个⼆进制对象,可以容纳可变数量的数据。TEXT 是⼀个不区分⼤⼩写的 BLOB。BLOB 和
TEXT 类型之间的唯⼀区别在于对 BLOB 值进⾏排序和⽐较时区分⼤⼩写,对 TEXT 值不区分⼤⼩写。
13、MySQL_fetch_array 和
MySQL_fetch_object 的区别是什么?
以下是 MySQL_fetch_array 和 MySQL_fetch_object 的区别:
MySQL_fetch_array() – 将结果⾏作为关联数组或来⾃数据库的常规数组返回。
MySQL_fetch_object – 从数据库返回结果⾏作为对象。
14、MyISAM 表格将在哪⾥存储,并且还提供其存储格式?
每个 MyISAM 表格以三种格式存储在磁盘上:
(1)·“.frm”⽂件存储表定义
(2)·数据⽂件具有“.MYD”(MYData)扩展名
(3)索引⽂件具有“.MYI”(MYIndex)扩展名
15、MySQL 如何优化 DISTINCT?
DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY ⼦句结合使⽤。
SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
16、如何显⽰前 50 ⾏?
在 MySQL 中,使⽤以下代码查询显⽰前 50 ⾏:
SELECT*FROM
LIMIT 0,50;
17、可以使⽤多少列创建索引?
任何标准表最多可以创建 16 个索引列。
18、NOW()和 CURRENT_DATE()有什么区别?
NOW()命令⽤于显⽰当前年份,⽉份,⽇期,⼩时,分钟和秒。
CURRENT_DATE()仅显⽰当前年份,⽉份和⽇期。
19、什么是⾮标准字符串类型?
press作为词根的单词(1)TINYTEXT
(2)TEXT
(3)MEDIUMTEXT
(4)LONGTEXT
20、什么是通⽤ SQL 函数?
(1)CONCAT(A, B) – 连接两个字符串值以创建单个字符串输出。通常⽤于将两个或多个字段合并为⼀个字段。