MySQL面试题整理

本文整理了MySQL面试中常见的问题,包括基本概念(如char和varchar、索引的使用和优缺点)、数据库主键和外键、各种SQL聚合函数、内连接、左连接和右连接,以及数据库设计原则。此外,还探讨了索引的类型和数据结构,如B+树和Hash索引的区别。最后,提到了数据库事务和存储引擎的相关知识。
摘要由CSDN通过智能技术生成

Java初级面试题整理

目录

mysql部分

基本概念

char和varchar

drop、delete与truncate

关于数据库主键和外键

mysql支持的约束

5种SQL常用聚合函数

SQL中内连接、左连接、右连接

数据库设计

索引

1、索引的几种类型或分类?

2、索引的优缺点?

3、索引设计原则?

4、索引的数据结构?

5、Hash 和 B+ 树索引的区别?

6、为何使用 B+ 树而非二叉查找树做索引?

7、为何使用 B+ 树而非 B 树做索引?

8、什么是最左匹配原则?

9、什么是覆盖索引?

10、什么是索引下推?

存储

事务

数据库事务

java

基本概念

面向对象

常用类库

泛型

多线程

IO流

反射


mysql部分

基本概念


char和varchar

区别

  • char 是一种固定长度的字符串类型

  • varchar 是一种可变长度的字符串类型

适用场景:

  • char一般用来存储长度固定字段,如:手机号,身份证号等

  • varchar一般用来存储不固定长度的字段:如:用户名,昵称等

MySQL的10种常用数据类型_


drop、delete与truncate

相同点:

  1. truncate和不带where子句的delete、以及drop都会删除表内的数据。

区别:

  1. drop、truncate都是DDL语句(数据库定义语言),执行后会自动提交,操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。

  2. delete 是DML语句(数据库操作语言),这个操作会放到rollback segement 中,事务提交之后才生效支持事务回滚,如果有相应的 trigger,执行的时候将被触发。

  3. delete不重置自动增长列的计数值

  4. truncate重置自动增长列的计数值

删除速度/效率:

一般来说删除效率: drop> truncate> delete

  • truncate在功能上与不带 where子句的 delete语句相同:二者均删除表中的全部行。但truncate比 delete速度快,且使用的系统和事务日志资源少。

  • delete语句每次删除一行,并在事务日志中为所删除的每行 记录一项

  • truncate通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

  • truncate删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。

使用范围:

delete:想删除部分数据行用 delete,注意应带上where条件子句. 回滚段要足够大;

drop:想删除整个表,当然用 drop;

truncate:想保留表字段、索引等而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

不能对以下表使用 TRUNCATE TABLE:

  1. 对于有foreign key约束引用的表,不能使用truncate,而应使用不带 where子句的 delete语句。(您可以截断具有引用自身的外键的表。)

  2. TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除。

  3. TRUNCATE TABLE 不能用于参与了索引视图的表


关于数据库主键和外键

主键:

  • 唯一标识一条记录的字段或字段的组合称为主键。

  • 主键不能重复,不允许为空

  • 作用:定义主键来强制不允许空值的指定列中输入值的唯一性。任何表都应该有且仅有唯一的主键,在数据库中为表定义主键,可将该表与其它表相关联,从而减少冗余数据。

外键

  • 通过设置外键和其他表建立关联关系(一对一,一对多,多对多),用来维护表之间数据一致性

  • 外键是关联从表的主键,可以重复, 允许为空值

  • 作用:FOREIGN KEY 约束并不仅仅只可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束不允许空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过 FOREIGN KEY 约束的校验。


mysql支持的约束

六种约束:

  1. NOT NULL:非空约束,用于保证该字段的值不能为空;比如姓名、学号等

  2. DEFAULT:默认约束,用于保证该字段有默认值;比如性别

  3. PRIMARY KEY:主键约束,用于保证该字段的值具有唯一性,并且非空;比如学号、员工编号等

  4. UNIQUE:唯一约束,用于保证该字段的值具有唯一性,可以为空;比如座位号

  5. CHECK:检查约束【mysql中不支持】;比如年龄、性别

  6. FOREIGN KEY:外键约束,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值;比如学生表的专业编号,员工表的部门编号,员工表的工种编号

添加约束的时机:

  • 创建表时

  • 修改表时

约束的添加分类:

  • 列级约束:六大约束语法上都支持,但外键约束没有效果

  • 表级约束:除了非空、默认,其他的都支持

了解更多请点击:约束的使用


5种SQL常用聚合函数

常用的聚合函数有:COUNT(),SUM(),AVG()

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值