MySql-重点
数据类型
问题:
1.float和double的区别
float是单精度,double是双精度,double的精确度比float要高,但是float和double都不是绝对精确
2.char和varchar的区别
插入支持的长度是0~255,varchar支持的长度是0~65535,char是定长字符串,varchar是变长的字符串,char是空间换时间的字符串,varchar是时间换空间的字符串,char不会动态的计算时间,varchar会动态的计算时间,从性能上来讲,varchar的性能没有char性能好,但是varchar更节约时间
3.char(32)和varchar(32)括号里面的长度是字节还是字符
MySQL5.0版本之前是字节,假设字符集是UTF-8,一个中文3个字节,那么char(32)只能存储10个中文字符,之后改为了字符
4.用什么类型存储金额
数据库里严禁用float和double存储金额,有两个解决方法
1.使用定点数类型decimal
2.使用长整型,存储到金额最小单位
5.超长文本(博客,文章)怎么存储
严禁使用varchar存储长文本,应该改为Blob类型或者text类型,并且应该把超长文本的字段从当前表拆分出去独立用一张表存储,设置与主表做主外键关联,防止因为出现超长的文本影响存储的效率,超过5000我们把它看做超长文本。
6.二进制文件(图片,音频,视频)怎么存储
MySQL可以存储二进制文件,用Binary类型,但是存储效率很差。正确存储方法:二进制数据存储到文件内直接存储在磁盘中,然后在数据库中创建一个字段,来记录文件的路径。
7.MySQL的整型支持无符号,使用关键字UNSIGNED
age tinyint -- age 字段取值范围是-128~127
age tinyint unsigned -- age 字段取值范围是0~255
约束
1.非空约束 NOT NULL
2.检查约束 CHECK(MySQL不支持)
3.唯一约束 UNIQUE
4.主键约束PRIMARY KEY
5.外键约束 FOREIGN KEY
SQL分类-语法整理(DDL | DML | DQL | DCL)
数据定义语言DDL(Data Ddefinition Language)
数据操纵语言DML(Data Manipulation Language)
数据查询语言DQL(Data Query Language)
数据控制功能DCL(Data Control Language)
事务控制功能TCL(Transaction Control Language)
连表查询的方式
关系类型和三范式、反三范式
数据库表关系:一对一,一对多,多对多
三范式 - 以时间换空间(减少冗余数据)
反(打破)三范式 - 以空间换时间(允许适量的冗余数据,减少关系)
事务四大特性和四种隔离级别
锁的种类
死锁、如何防止死锁
索引
索引的优缺点
时间
索引可以大大提升查询的速度
牺牲了增删改的速率,在增删改长度时候,为了保证索引的有序性,需要动态维护索引
空间
创建索引需要占用磁盘空间
索引的分类
主键索引:关键字primary key
唯一索引:关键字unique
普通索引(非唯一):关键字index
全文索引:关键字fulltext
聚簇索引=主键索引=一级索引
非聚簇索引=(唯一索引,普通索引)=二级索引
创建和删除索引的语法
(聚簇索引=主键索引是表自带的,我们自己创建的都是非聚簇索引)
(如果表没有主键,那么会选择隐藏列rowid来创建聚簇索引)
创建
1.在create table建表的时候添加索引
2.在create table建表成功以后,使用alter语句添加索引
ALTER TABLE 表名 ADD INDEX 索引名(字段名);
3.在create table建表成功以后,使用create index语句添加索引
CREATE INDEX 索引名ON 表名(字段名);
删除
1.使用alter语句删除索引
ALTER TABLE 表名 DROP INDEX 索引名;
2.使用drop语句删除索引
DROP INDEX 索引名 ON 表名;
索引的数据结构
MySQL的索引支持两种数据结构
B+TREE B+树结构的索引
HASH 哈希结构的索引
数据结构的演进
二叉树
平衡二叉树-AVL树
左旋算法:当右边的叶子节点的深度-左边叶子节点的深度>1的时候,触发左旋
右旋算法:当左边的叶子节点的深度-右边叶子节点的深度>1的时候,触发右旋
目的:维持树的平衡
多路平衡二叉树-B树
树的度数(Degree):每个节点中可以存储的元素的个数
单路树:度数=1
多路树:度数=n,n>1
同等规模的数据,单路树是高瘦树,多路树是矮胖树
多路树比单路树的优势在于更少次数的磁盘IO就可以找到数据
MySQL是怎么设计索引的
树的每一个节点是一个磁盘块,MySQL将表的ibd文件拆分为很多个磁盘块
每个磁盘块的大小统一是16kb,每次磁盘IO都是读取一个磁盘块的数据
一个磁盘块的数据也称为一页数据
B-树升级为B+树
MySql-了解
存储引擎的区别
InnoDB
MyIsam
Memory
关系型数据库与NoSQL(非关系型)数据库的区别
主流的关系型数据库:MySQL Oracle
主流的NoSQL数据库:Redis
MySQL和Redis的关系不是谁能替代谁,而是在数据量非常大,数据库并发操作非常频繁的情况下,可以通过Redis来搭建缓存服务器分担MySQL的压力
视图、存储过程、存储函数、触发器
SQL语句优化、数据库优化的思路
数据库的冷热备份
冷备份指的是停机(关闭数据库服务)备份-此时服务不可用
热备份指的是不停机备份-此时服务可用