mysql-面试题

一、SQL语句

1、SQL语句的分类

  • DQL:数据查询语言—select
  • DML:数据操作语言—insert/update/delete
  • DDL:数据定义语言—create/drop/alter
  • DCL:数据控制语言—start transaction/commit/rollback

2、Sql语句的执行顺序

  • SQL 语句的执行顺序与编写顺序并不相同
  • FROM、ON、JOIN、WHERE、GROUP BY、HAVING、SELECT、DISTINCT、ORDER BY、LIMIT
  • 最终返回结果

3、Truncate与delete的区别

  • Truncate不能加where条件,而delete可以
  • Truncate更高效,不记录任何日志,整个表数据立即删除;delete则会为每行记录一条日志
  • Truncate后,再插入数据,主键从1开始;Delete则从上次的断点开始
  • Truncate不能回滚,delete可以

4、count(1)、count(*)和count(col)的区别

  • count(1)和count(*)返回记录的行数,包括NULL的统计
  • count(col)是不包括NULL的统计

5、存储MD5 的值应该用VARCHAR 还是CHAR

  • 使用Char 类型,原因是:char 类型是固定长度的字符串,varchar 是可变长度字符串。而MD5 是一个固定长度的字符,不管数据怎么修改,长度不变,这个点很符合char类型。另外,由于是固定长度,所以在数据变更的时候,不需要去调整存储空间大小,在效率上会比varchar 好。
  • char与varchar的区别
    • 长度:char类型的长度是固定的,而varchar类型的长度是可变的。char类型的长度一旦定义,无论存储的数据有多少,都会占用固定长度的空间。当存储的数据长度小于定义长度时,char类型会在数据后面用空格填充至定义长度。而varchar类型则不同,它仅存储实际的数据长度,不会额外使用空间。
    • 存储方式:char和varchar的存储方式也有所不同。在存储英文字符时,char类型占用1个字节,而varchar类型占用2个字节。对于汉字的存储,两种类型都是占用2个字节。
    • 效率:char类型的存取速度要比varchar类型快得多。因为char类型的长度固定,程序在存储和查找时可以更加高效。然而,这种效率的提升是以空间为代价的,因为char类型会产生额外的隐藏空格。varchar类型虽然存取速度相对较慢,但可以节省空间,尤其是当存储的数据长度小于定义长度时。
    • 场景:char适合用于存储长度固定且数据量不大的字符字段,例如身份证号、手机号等;而varchar则更适合用于存储长度可变、数据量较大的字符字段,例如文章内容、用户备注等。在实际应用中,应根据具体需求和场景选择合适的字符类型。

6、varchar(10)和varchar(20)的区别

  • 存储hello所占空间一样
  • 后者在排序时会消耗更多内存

7、什么是多表查询

  • 内连接:驱动表中的记录在被驱动表中找不到匹配的记录,该记录不会加入到最后的结果集
  • 外连接:驱动表中的记录即使在被驱动表中没有匹配的记录,也仍然需要加入到结果集
    • 左连接:选取左侧的表为驱动表
    • 右连接:选取右侧的表为驱动表
  • 子查询

8、什么是SQL注入

  • Sql字符串拼接存在漏洞
  • 解决

9、SQL语句避免过多的join

  • 性能问题:每个join 操作都需要对两个或多个表进行连接操作,这个操作需要消耗大量的计算资源和时间,如果join 操作过多,会导致SQL 的执行效率降低,从而影响整个系统的性能。
  • 可读性和维护性问题:join 操作会使SQL 语句变得复杂,难以理解和维护,特别是当join 操作涉及到多个表的时候,SQL 语句的复杂度会呈现指数级增长,给代码的可读性和可维护性带来挑战。

二、索引

1、索引的分类/类型

  • 主键索引:数据列不允许重复,不允许为NULL,一个表只能有一个主键
  • 唯一索引:数据列不允许重复,允许为NULL 值,一个表允许多个列创建唯一索引
  • 普通索引:基本的索引类型,没有唯一性的限制,允许为NULL 值。
  • 覆盖索引:查询列要被所建的索引覆盖,不必读取数据行
  • 联合索引:多列组成一个索引,用于组合搜索,效率大于索引合并
  • 全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。

2、与B树、红黑树相比,B+树索引的优点

  • 数据库文件很大,需要存储到磁盘,索引的结构要尽量减少查找过程
  • 高度原因&#
  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值