mysql面试理论知识--SQL约束、三范式、索引、事务、优化

什么是SQL
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。用于存取数据、查询、更新和管理关系数据库系统。

SQL掌握情况
掌握基本的增删改查,熟练嵌套、组合、子查询等以及聚合、窗口函数、表连接
1) 基本操作 掌握增删改查等SQL基本语法:
–增 INSERT INTO <表名> (字段名) VALUES (值);
–删 DELETE FROM <表名> WHERE <筛选条件>;
–改 UPDATE <表名> SET <字段名=值> WHERE <筛选条件>;
–查 SELECT * FROM <表名> WHERE <筛选条件>;
2) 查询 SQL中的查询操作相当重要,关系着数据分析的效率高低,查询的基本语法是:
SELECT * FROM <表名> WHERE <筛选条件> GROUP BY <字段名> HAVING <条件>
在此基本语法上衍生出许多知识点:
A. 嵌套查询:WHERE筛选条件中使用嵌套查询,将(SELECT-FROM-WHERE)的查询语句作为子查询嵌套进去;
B. 组合查询:使用UNION/UNION ALL对多个查询结果进行组合,其中UNION将对结果进行去重;
C. 表连接:表连接中根据使用场景选择INEER/LEFT/RIGHT/FULL JOIN;
D. 聚合函数:使用MAX/MIN/SUM/AVG/COUNT对查询数据进行聚合;
E. 窗口函数:多查询数据排序或多样性聚合

什么是MySQL?
MySQL是一种开放源代码的关系型数据库管理系统,使用结构化查询语言(SQL)进行数据库管理

SQL语句主要分为哪几类
数据定义语句DDL:create ,drop , alter
数据查询语句DQL:select
数据操作语句DML:insert ,update , delete
数据控制语句DCL:grant ,revoke ,commit , rollback

SQL约束有哪些?

  • 主键约束PRIMARY KEY:主键是指表中一列或者多列的组合,能唯一标识表中的每一行,一个表中只有一个主键,且非空
  • 外键约束FOREIGN KEY:外键用于在两个表之间建立关系,只有主表的主键列可以被从表用作外键,被约束的从表列可以不是主键
  • 唯一约束UNIQUE:某一列具有唯一约束,是指该列数据没有相同的值。一个表可以定义多个唯一约束
  • 默认约束:插入数据时,如果具有默认约束列没有数据,则将默认值插入,没有设置默认值,则为NULL
  • CHECK: 用于控制字段的值范围

MySQL的常用存储引擎有什么?
InnoDB是MySQL的默认存储引擎,支持事务、行锁和外键等操作
MyISAM是MySQL5.1版本前的默认存储引擎,MyISAM的并发性比较差,不支持事务和外键等操作,默认的锁的粒度为表级锁。
在这里插入图片描述

数据库的三大范式
第一范式:每列保存原子性,数据库中的所有字段值都是不可分解的原子值,即每个列都不可以再拆分
第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分
第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键

mysql的数据类型
整数,浮点数,字符串,日期

Union和Join的区别
UNION是两张表进行上下拼接,产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集,分为UNION和UNION ALL两种方法;
JOIN 是两张表进行左右连接,条件匹配的记录将合并产生一个记录集,有LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN等多种方法
union上下合并,形成一个新的记录集,有去重作用,join是关联的关键词,左右关联,合并成一个记录集

索引

索引?索引的优缺点?
索引是对数据库表的一列或者多列的值进行排序的一种结构,使用索引可以快速访问特定信息。
优点:数据检索的速度提升;加速表与表之间的连接
缺点:空间上,建立索引占用物理空间;时间上,创建和维护索引需要花费时间,例如增删改查时都需要维护索引

MySQL索引的数据结构
MySQL索引的数据结构主要有B+树和哈希表

B+树和哈希表的区别
两者数据结构上的差异导致它们的使用场景也不同,哈希索引一般多用于精确的等值查找,B+索引则多用于除了精确的等值查找外的其他查找。在大多数情况下,会选择使用B+树索引。

MySQL的索引类型,索引种类

数据库事务?
数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

事务的四大特性?
原子性:原子性指包含事务的操作要么全部执行成功,要么全部失败
一致性:一致性指事务在执行前后状态是一致的
隔离性:一个事务所进行的修改在最终提交前,对其他事务是不可见的
持久性:数据一旦提交,其所作的修改将永久地保存在数据库中

子查询
在一个查询中使用另一个查询结果

连接查询
MySQL的连接查询可以分为外连接,内连接,交叉连接
交叉连接:使用笛卡儿积

varchar 与 char
1.varchar表示变长,char表示长度固定。当所插入的字符超过他们的长度时,在严格模式下,会拒绝插入并提示错误信息,在一般模式下,会截取后插入。
如char(5),无论插入的字符长度是多少,长度都是5,插入字符长度小于5,则用空格补充。对于varchar(5),如果插入的字符长度小于5,则存储的字符长度就是插入字符的长度,不会填充
2.存储容量不同,对于char来说,最多能存放的字符个数为255。对于varchar,最多能存放的字符个数是65532。
3.存储速度不同,char长度固定,存储速度会比varchar快一些,但在空间上会占用额外的空间,属于一种空间换时间的策略。而varchar空间利用率会高些,但存储速度慢,属于一种时间换空间的策略。

drop, delete 与truncate区别
在这里插入图片描述
删除整个表,使用drop,删除表的部分数据使用delete,保留表结构删除表的全部数据使用truncate。

like的用法
like的作用是模糊查询,用%表示模糊的字符 1. 可以用在where子句中限定查询结果的条件 2. 也可以用在select查询语句中作为清洗数据的标准

union 与union all
两者都是将两个结果集合并到一起
union会对结果去重并排序,union all直接直接返回合并后的结果,不去重也不进行排序。 union all的性能比union性能好

临时表
MySQL在执行SQL语句时会临时创建一些储存中间结果的表,即临时表。临时表只对当前连接可见,在连接关闭后,临时表会被删除并释放空间。
临时表主要分为内存临时表和磁盘临时表两种。内存临时表使用的是MEMORY存储引擎,磁盘临时表使用的是MyISAM存储引擎。
一般在以下几种情况中会使用到临时表: FROM中的子查询、 DISTINCT查询并加上ORDER BY 、ORDER BY和GROUP BY的子句不一样时会产生临时表、 使用UNION查询会产生临时表

为什么要设置主键?主键一般用自增id还是UUID?
因为主键是唯一区分表中每一行的唯一标识,如果没有主键,更新或者删除表中特定的行会很困难,因为不能唯一准确地标识某一行
自增ID好处:

  • 字段长度较uuid会小很多。
  • 数据库自动编号,按顺序存放,利于检索
  • 无需担心主键重复问题

自增ID缺点:

  • 因为是自增,在某些业务场景下,容易被其他人查到业务量。
  • 发生数据迁移时,或者表合并时会非常麻烦
  • 在高并发的场景下,竞争自增锁会降低数据库的吞吐能力
    UUID:通用唯一标识码,UUID是基于当前时间、计数器和硬件标识等数据计算生成的

UUID的优点:

  • 唯一标识,不会考虑重复问题,在数据拆分、合并时也能达到全局的唯一性。
  • 可以在应用层生成,提高数据库的吞吐能力。
  • 无需担心业务量泄露的问题。

UUID的缺点:

  • 因为UUID是随机生成的,所以会发生随机IO,影响插入速度,并且会造成硬盘的使用率较低。
  • UUID占用空间较大,建立的索引越多,造成的影响越大。
  • UUID之间比较大小较自增ID慢不少,影响查询速度。

一般情况MySQL推荐使用自增ID

如何优化长难句的查询语句?
将一个大的查询分解为多个小的查询
分解关联查询,使缓存的效率更高

如何优化union查询?
如果不需要对结果集进行去重或者排序,建议使用union all

SQL语句执行的很慢原因?
如果是偶尔执行的很慢,可能是执行的时候遇到了锁,也可能是redo log日志写满了,要将redo log中的数据同步到磁盘中去。
如果SQL语句一直都很慢,可能是字段上没有索引或者字段有索引但是没用上索引

SQL语句执行顺序?

SELECT DISTINCT select_list 
FROM left_table 
LEFT JOIN right_table ON join_condition 
WHERE where_condition 
GROUP BY group_by_list 
HAVING having_condition 
ORDER BY order_by_condition

from -> on -> join -> where -> group by -> having -> select -> order by

引擎 索引 事务 锁 视图 触发器 日志 优化

参考连接

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值