SQL基础
NOSQL和SQL的区别
- NOSQL: 非关系型数据库,更加宽松的模型BASE, 即基本可用,软状态和最终一致性
- SQL:关系型数据库,支持ACID,原子性、一致性、隔离性、持续性
数据库三大范式
- 第一:原子项
- 第二:非码属性完全依赖于候选码,而不是单独某一个部分(部分函数依赖)
- 第三:消除了传递依赖
联表查询
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN 需要使用UNION来实现
如何避免重复插入数据
- 使用
UNIQUE - 使用
INSERT ... ON DUPLICATE KEY UPDATE如果有记录冲突,可以选择进行更新 - 使用
INSERT IGNORE INTO来避免冲突
CHAR和VARCHAR有什么区别
CHAR:固定长度,末尾补空格,短字符效率跟高VARCHAR:可变长度的字符串类型,定义时需要指定最大长度,适合存储可变长度的数据
VARCHAR(10)这种是什么意思
- 如果是ASCII字符集,每个字符占用一个字节,那么这最多可以存储10个ASCII字符,同时占用的空间最多为10个字节
- 如果是UTF-8字符集,他的每个字符可能占用1-4个字节,他最多是存储10个字符
int(1)和int(10)在MySQL上有什么不同
int在mysql占用的也是4个字节- 数值代表的是宽度,
int(1)只会填充一个宽度,int(10)会填充10个宽度,然后不够的前面补0
text数据类型可以无限大吗
text是$2^{16}$,也就是64kbMediumtext是$2^{24}$,即16MBlongtext是$2^{32}$,也就是4GB
IP地址如何在数据库中存储
- ipv4是32个bit,可以选择字符串存储,也就是
varchar(15) - 可以进行
unsigned int的方式进行存储
外键约束是什么
primary key ... references ...保证了数据的一致性
IN和exist区别
WHERE condition IN (VALUE1,VALUE2...)查询的是在里面的值的情况WHERE condition EXIST ...判断是的一个bool类型,所以当判断找到条件就停止判断,返回true,效率更高
MySQL中的一些基本函数
- 日期函数
MONTH(NOW()), - 聚合函数
COUNT(*),SUM()… - 数值函数
ABS()
查询语句的基本顺序是什么
- 查询都是从
FROM开始执行,生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入,每一个步骤都会生成一个虚拟表,最后一个步骤产生的虚拟表即为输出结果 
存储引擎
SQL指令的执行过程
- 连接器:建立和管理连接,检验用户的身份
- 查询缓存:有则直接返回结果
- 解析器:sql语句进行词法,语法的分析,构建语法树等
- 执行器:预处理/优化/执行
对于MySQL引擎的了解
INNODB,MySQL默认的存储引擎,支持ACID事务支持,行级锁,外键约束等特性,适用于高并发的读写操作MyISAM,另一种常见的存储引擎,具有较低的存储空间和内存消耗,适用于大量的读写操作的场景Memory,将数据存储在内存中,因此对性能要求较高的读操作,但是服务器重启或崩溃时数据会丢失
数据文件大体分为哪几类
db.opt:存储当前数据库默认的字符集和字符检验规则t_order.frm:保存表的结构t_order.ibd:保存表的数据
索引
索引是什么,有什么特性
- 没有索引,会进行全表的扫描查询,时间复杂度为$O(n)$
- 有索引,可以基于二分查找的算法,一般的数据结构为b+树,查询的时间复杂度为$O(log{dN})$
索引分类
-
数据结构分类:b+树,hash,full-text

-
物理存储:聚簇索引,二级索引
- 主键索引的b+树叶子节点存放的是实际数据
- 二级索引的b+树存放的是主键值
- 如果查询数据的时候,数据能在二级索引查询得到,就不需要回表,否则需要回表,这个过程叫做覆盖索引
-
字段特性:主键索引,唯一索引,普通索引,前缀索引
- 主键索引:创建表的时候建立在主键字段上的索引
- 唯一索引:建立在
UNIQUE字段上的索引 - 普通索引:建立在普通字段
- 前缀索引:针对字符串类型的前几个字符建立的索引
-
字段个数:单列索引,联合索引
- 单列索引:建立在单列上的索引
- 联合索引:建立在多列上的索引,通过将多个字段组合成一个索引,该索引就被称为联合索引,这种索引的情况下使用的是最左匹配原则
哈希索引的使用场景
- 查询速度快,通过哈希函数计算数据位置来定位获取数据
- 在
MEMORY数据引擎中,比方讲缓存用户登录信息,通过用户ID快速查找对应的登录状态等信息,能够直接通过用户ID来计算哈希值,定位数据所在的桶,查询效率接近$O(1)$
聚簇索引和非聚簇索引的区别是什么
- 数据索引:是否包含有实际的数据行
- 索引与数据关系:

