背完这些面试题就能吊打面试官 —— MySQL

1.什么是内连接、外连接、交叉连接?

内连接:取两张表符合连接条件的记录

外连接:除取两张表符合连接条件的记录外,还取某张表或两张表中不满足连接条件记录

交叉连接:取两张表所有记录的一一对应

2.MySQL 的内连接、左连接、右连接有什么区别?

内连接:返回两张表符合连接条件的记录

左连接:返回左表的所有记录和右表满足连接条件的记录,如果右表没有满足条件的记录,则以 NULL 填充

右连接:返回右表的所有记录和左表满足连接条件的记录,如果左表没有满足条件的记录,则以 NULL 填充

3.数据库的三大范式

三大范式的作用是减少数据冗余,提高数据完整性

三分恶面渣逆袭:数据库三范式

第一范式:确保表中每一列是不可分割的

第二范式:在第一范式的基础上,要求数据库表中的每一列和主键直接相关,而不能只与主键的某一部分相关

第三范式:在第二范式的基础上,消除非主键列对主键的传递依赖

4.varchar 与 char 的区别?

  • varchar 是不定长字符串,char 是定长字符串

  • varchar:插入数据是多长就按照多长存储,char:插入数据长度小于 char 的固定长度就用空格补齐

  • varchar 存取速度慢于 char

  • varchar 最大长度为 65532,char 最大长度 255

5.blob 和 text 有什么区别?

  • blob 存储二进制数据,text 存储大字符串

  • blob 没有字符集,text 有字符集,并根据字符集的校对规则对值进行排序和比较

6.DATETIME 和 TIMESTAMP 的异同?

相同:

  1. 日期时间存储格式一致

  2. 都可存储日期时间

  3. 都能存储微妙,小数点后六位

不同:

  1. 前者无默认值,后者有

  2. 前者无时区信息,后者有

  3. 前者占8个字节,后者4个

  4. 前者日期范围:1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999,后者日期范围:1970-01-01 00:00:01.000000 UTC 到 ``2038-01-09 03:14:07.999999 UTC

7.MySQL 中 in 和 exists 的区别?

  1. 查询两张表大小相当,二者差别不大

  2. 如果两个表一个是大表一个是小表,则子查询表大的用exits,小的用in

  3. 如果查询语句用到了 not in,那么内外表都要全部扫描,不用索引,而 not exits 的子查询能用索引。因此无论表大还是表小,后者性能更高

8.MySQL 里记录货币用什么字段类型比较好?

decimal 和 numric

9.MySQL 怎么存储 emoji?

MySQL 的 utf8 字符集仅支持最多 3 个字节的 UTF-8 字符,但是 emoji 表情(😊)是 4 个字节的 UTF-8 字符,所以在 MySQL 中存储 emoji 表情时,需要使用 utf8mb4 字符集。

ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

MySQL 8.0 已经默认支持 utf8mb4 字符集,可以通过 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; 查看。

10.drop、delete 与 truncate 的区别?

区别 delete truncate drop
类型 属于 DML 属于 DDL 属于 DDL
回滚 可回滚 不可回滚 不可回滚
删除内容 表结构还在,删除表的全部或者一部分数据行 表结构还在,删除表中的所有数据 从数据库中删除表,所有数据行,索引和权限也会被删除
删除速度 删除速度慢,需要逐行删除 删除速度快 删除速度最快

11. UNION 与 UNION ALL 的区别?

  • UNION 在表连接时会筛掉重复的记录行,UNION ALL 不会

  • UNION ALL性能更高

12.count(1)、count(*) 与 count(列名) 的区别?

  • count(1):统计所有行数,但不关注行中的具体列数据,不会忽略 NULL 值

  • count(*):统计所有行数并检查行中的每列是否为 null ,不忽略 NULL 值

  • count(列名):统计那一列所有行,会忽略 NULL 值

13.一条 SQL 查询语句的执行顺序?

查询语句执行顺序

  1. FROM:对 FROM 子句中的左表<left_table>和右表<right_table>执行笛卡儿积(Cartesianproduct),产生虚拟表 VT1

  2. ON:对虚拟表 VT1 应用 ON 筛选,只有那些符合<join_condition>的行才被插入虚拟表 VT2 中

  3. JOIN:如果指定了 OUTER JOIN(如 LEFT OUTER JOIN、RIGHT OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表 VT2 中,产生虚拟表 VT3。如果 FROM 子句包含两个以上表,则对上一个连接生成的结果表 VT3 和下一个表重复执行步骤 1)~步骤 3),直到处理完所有的表为止

  4. WHERE:对虚拟表 VT3 应用 WHERE 过滤条件,只有符合<where_condition>的记录才被插入虚拟表 VT4 中

  5. GROUP BY:根据 GROUP BY 子句中的列,对 VT4 中的记录进行分组操作,产生 VT5

  6. CUBE|ROLLUP:对表 VT5 进行 CUBE 或 ROLLUP 操作,产生表 VT6

  7. HAVING:对虚拟表 VT6 应用 HAVING 过滤器,只有符合<having_condition>的记录才被插入虚拟表 VT7 中。

  8. SELECT:第二次执行 SELECT 操作,选择指定的列,插入到虚拟表 VT8 中

  9. DISTINCT:去除重复数据,产生虚拟表 VT9

  10. ORDER BY:将虚拟表 VT9 中的记录按照<order_by_list>进行排序操作,产生虚拟表 VT10。11)

  11. LIMIT:取出指定行的记录,产生虚拟表 VT11,并返回给查询用户

14.介绍一下 MySQL bin 目录下的可执行文件

  • mysql:客户端程序,连接 MySQL 服务器

  • mysqldump:MySQL 数据库备份工具,用于创建一个或多个 MySQL 数据库级别的 SQL 转储文件,包含表结构和数据。对数据备份、迁移、恢复非常重要

  • mysqladmin:MySQL 管理工具。可创建、删除数据库,查看 MySQL 服务器状态

  • mysqlcheck:MySQL 提供的命令行工具,用于检查、修复、分析和优化数据库表,对数据库的维护和性能优化非常有用

  • mysqlimport:用于从文本文件中导入数据到数据库表中,非常适合用于批量导入数据。

  • mysqlshow:用于显示 MySQL 数据库服务器中的数据库、表、列等信息。

  • mysqlbinlog:用于查看 MySQL 二进制日志文件的内容,可以用于恢复数据、查看数据变更等。

15.用过哪些 MySQL 函数?

用过哪些字符串函数来处理文本?

  • CONCAT(): 连接两个或多个字符串。

  • LENGTH(): 返回字符串的长度。

  • SUBSTRING(): 从字符串中提取子字符串。

  • REPLACE(): 替换字符串中的某部分。

  • LOWER()UPPER(): 分别将字符串转换为小写或大写。

  • TRIM(): 去除字符串两侧的空格或其他指定字符。

用过哪些数值函数用过哪些数值函数?

  • ABS(): 返回一个数的绝对值。

  • CEILING(): 返回大于或等于给定数值的最小整数。

  • FLOOR(): 返回小于或等于给定数值的最大整数。

  • ROUND(): 四舍五入到指定的小数位数。

  • MOD()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值