mysql-面试题

一、SQL语句

1、SQL语句的分类

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

2、Sql语句的执行顺序

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

3、Truncate与delete的区别

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

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

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

5、char与varchar的区别

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

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

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

6、什么是多表查询

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

7、什么是SQL注入

  1. Sql字符串拼接存在漏洞
  2. 解决

8、为什么SQL 语句不要过多的join?

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

二、索引

1、索引的分类

  1. 主键索引:数据列不允许重复,不允许为NULL,一个表只能有一个主键
  2. 唯一索引:数据列不允许重复,允许为NULL 值,一个表允许多个列创建唯一索引
  3. 普通索引:基本的索引类型,没有唯一性的限制,允许为NULL 值。
  4. 覆盖索引:查询列要被所建的索引覆盖,不必读取数据行
  5. 联合索引:多列组成一个索引,用于组合搜索,效率大于索引合并

2、索引的类型

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

  1. 数据库文件很大,需要存储到磁盘,索引的结构要尽量减少查找过程
  2. 高度原因:B+树每个节点包含许多关键字,降低树的深度。任何关键字查找,都要从根节点到叶子节点,查询路径相同,每一个数据查询的效率相当。
  3. B树适合随机检索,而B+树适用于顺序检索和随机检索
  4. B

你可能感兴趣的:(数据库,mysql,java,面试)