点击“程序员面试吧”,选择“星标🔝”
点击文末“阅读原文”解锁资料!
一个典型的互联网产品架构包含接入层、逻辑处理层以及存储层,其中存储层承载着数据落地和持久化的任务,同时给逻辑处理层提供数据查询功能支持。说到存储层就要说到数据库,数据库知识掌握程度也是面试考察的知识点。
关系型数据库
什么是关系型数据库?
关系型数据库有什么优势?
易于理解。关系型二维表的结构非常贴近现实世界,二维表格,容易理解。 支持复杂查询。可以用 SQL 语句方便的在一个表以及多个表之间做非常复杂的数据查询。 支持事务。可靠的处理事务并且保持事务的完整性,使得对于安全性能很高的数据访问要求得以实现。
MySQL 数据库
什么是 SQL
什么是MySQL?
MySQL 和 MariaDB 傻傻分不清楚?
一个彩蛋
如何查看 MySQL 当前版本号?
Server: MySQL
Server version: 5.5.45
Protocol version: 10
+------------------------+
| version() |
+------------------------+
| 5.5.45-xxxxx |
+------------------------+
基础数据类型
MySQL 有哪些数据类型?
CHAR 和 VARCHAR的区别?
共同点
CHAR类型特点
CHAR 最多可以存储 255 个字符 (注意不是字节),字符有不同的编码集,比如 UTF8 编码 (3字节)、GBK 编码 (2字节) 等。 对于 CHAR(M) 如果实际存储的数据长度小于M,则 MySQL 会自动会在它的右边用空格字符补足,但是在检索操作中那些填补出来的空格字符会被去掉。
VARCHAR类型特点
VARCHAR 的最大长度为 65535 个字节。 VARCHAR 存储的是实际的字符串加1或2个字节用来记录字符串实际长度,字符串长度小于255字节用1字节记录,超过255就需要2字节记录。
VARCHAR(50) 能存放几个 UTF8 编码的汉字?
int(10) 和 bigint(10) 能存储的数据大小一样吗?
int 能存储四字节有符号整数。 bigint 能存储八字节有符号整数。
显示宽度指明 Mysql 最大可能显示的数字个数,数值的位数小于指定的宽度时数字左边会用空格填充,空格不容易看出。 如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然可以插入且能够显示出来。 建表的时候指定 zerofill 选项,则不足显示宽度的部分用 0 填充,如果是 1 会显示成 0000000001。 如果没指定显示宽度, bigint 默认宽度是 20 ,int 默认宽度 11。
存储引擎相关
MySQL 存储引擎类型有哪些?
# 查询结果表中的 Engine 字段指示存储引擎类型。
show table status from 'your_db_name' where name='your_table_name';
InnoDB 存储引擎应用场景是什么?
InnoDB存储引擎特性有哪些?
InnoDB 引擎的四大特性是什么?
插入缓冲(Insert buffer)
二次写 (Double write)
自适应哈希索引 (Adaptive Hash Index)
缓存池
MyISAM存储引擎应用场景有哪些?
MyISAM存储引擎特性有哪些?
MyISAM 与 InnoDB 存储引擎 5 大区别
InnoDB 支持事物,而MyISAM不支持事物 InnoDB 支持行级锁,而MyISAM支持表级锁 InnoDB 支持MVCC, 而MyISAM不支持 InnoDB 支持外键,而MyISAM不支持 InnoDB 不支持全文索引,而MyISAM支持
SELECT COUNT(*) 在哪个引擎执行更快?
MySQL 基础知识
说一下数据库设计三范式是什么?
SQL 语句有哪些分类?
DDL:数据定义语言(create alter drop) DML:数据操作语句(insert update delete) DTL:数据事务语句(commit collback savapoint) DCL:数据控制语句(grant revoke)
数据库删除操作中的 delete、drop、 truncate 区别在哪?
当不再需要该表时可以用 drop 来删除表; 当仍要保留该表,但要删除所有记录时, 用 truncate 来删除表中记录。 当要删除部分记录时(一般来说有 WHERE 子句约束) 用 delete 来删除表中部分记录。
什么是 MySql 视图?
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = user]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
OR REPLACE:如果视图存在,则替换已有视图。 ALGORITHM:视图选择算法,默认算法是 UNDEFINED(未定义的)由 MySQL 自动选择要使用的算法。 DEFINER:指定视图创建者或定义者,如果不指定该选项,则创建视图的用户就是定义者。 SQL SECURITY:SQL 安全性,默认为 DEFINER。 select_statement:创建视图的 SELECT 语句,可以从基表或其他视图中选择数据。 WITH CHECK OPTION:表示视图在更新时保证约束,默认是 CASCADED。
使用 MySQL 视图有何优点?
操作简单方便。视图用户完全不需要关心视图对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。 数据更加安全。视图用户只能访问视图中的结果集,通过视图可以把对表的访问权限限制在某些行和列上面。 数据隔离。屏蔽了源表结构变化对用户带来的影响,源表结构变化视图结构不变。
MySql 服务默认端口号是多少 ?
用 DISTINCT 过滤多列的规则?
name number
Tencent 1
Alibaba 2
Bytedance 3
Meituan 3
name
Tencent
Alibaba
Bytedance
Meituan
number name
1 Tencent
2 Alibaba
3 Bytedance
3 Meituan
number name
1 Tencent
2 Alibaba
3 Bytedance
什么是存储过程?
存储过程能实现较快的执行速度。 存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 存储过程可被作为一种安全机制来充分利用。 存储过程能够减少网络流量。
delimiter 分隔符
create procedure|proc proc_name()
begin
sql语句
end 分隔符
delimiter ; --还原分隔符,为了不影响后面的语句的使用
--默认的分隔符是;但是为了能在整个存储过程中重用,因此一般需要自定义分隔符(除\外)
show procedure status like ""; --查询存储过程,可以不适用like进行过滤
drop procedure if exists;--删除存储过程
存储过程和函数好像差不多,你说说他们有什么区别?
存储过程和函数都是为了可重复的执行操作数据库的 SQL 语句的集合。 存储过程和函数都是一次编译后缓存起来,下次使用就直接命中已经编译好的 sql 语句,减少网络交互提高了效率。
标识符不同,函数的标识符是 function,存储过程是 procedure。 函数返回单个值或者表对象,而存储过程没有返回值,但是可以通过 OUT 参数返回多个值。 函数限制比较多,比如不能用临时表,只能用表变量,一些函数都不可用等,而存储过程的限制相对就比较少。 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 函数的参数只能是 IN 类型,存储过程的参数可以是 IN OUT INOUT 三种类型。 存储函数使用 select 调用,存储过程需要使用 call 调用。
|免费提升专区|
|扫码直达|