什么是数据库
数据库 ( DataBase , 简称DB )
概念 : 长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据 “仓库”
作用 : 保存,并能安全管理数据(如:增删改查等),减少冗余…
数据库总览 :
关系型数据库 ( SQL )
MySQL , Oracle , SQL Server , SQLite , DB2 , …
关系型数据库通过外键关联来建立表与表之间的关系
非关系型数据库 ( NOSQL ) not only
Redis , MongoDB , …
非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定
DDL操作数据库
创建数据库
CREATE DATABASE 数据库名; -- 创建数据库
CREATE DATABASE 数据库名 SET GBK; -- 创建数据库并设置为gbk编码格式
CREATE DATABASE 数据库名 SET GBK COLLATE gbk_chinede_ci; -- 创建一个使用gbk字符集,并带校对规则的数据库
查询数据库
SHOW DATABASES; -- 查看当前数据库服务器中的所有数据库
SHOW CREATE DATABASE 数据库名; --查看创建数据库时的定义信息
删除数据库
DROP DATABASE 数据库名; -- 删除指定数据库
修改数据库
ALTER DATABASE 数据库名 CHARACTER SET utf8; -- 将数据库的字符集改为utf8
在创建表格之前需要先选择表格创建的数据库,所以需要选择数据库:
USE 数据库名; -- 使用数据库
SELECT DATABASE(); -- 选中数据库
DDL操作数据表
创建数据表
语法: CREATE TABLE 表名(
字段1 字段类型,
字段2 字段类型,
...
字段n 字段类型
);
常用数据类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
char:固定长度字符串类型; char(10) 'abc '
varchar:可变长度字符串类型;varchar(10) 'abc'
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
MySQL索引类型
如左面的模块,共分为5类:
- 唯一索引:就是索引列中的值必须是唯一的,但是允许出现空值。这种索引一般用来保证数据的唯一性,比如保存账户信息的表,每个账户的id必须保证唯一,如果重复插入相同的账户id时会MySQL返回异常。
- 主键索引:是一种特殊的唯一索引,但是它不允许出现空值。
- 普通索引:与唯一索引不同,它允许索引列中存在相同的值。例如学生的成绩表,各个学科的分数是允许重复的,就可以使用普通索引。
- 联合索引:就是由多个列共同组成的索引。一个表中含有多个单列的索引并不是联合索引,联合索引是对多个列字段按顺序共同组成一个索引。应用联合索引时需要注意最左原则,就是Where查询条件中的字段必须与索引字段从左到右进行匹配。比如,一个用户信息表,用姓名和年龄组成了联合索引,如果查询条件是姓名等于张三,那么满足最左原则;如果查询条件是年龄大于20,由于索引中最左的字段是姓名不是年龄,所以不能使用这个索引。
- 全文索引:前面提到了,MyISAM引擎中实现了这个索引,在5.6版本后InnoDB引擎也支持了全文索引,并且在5.7.6版本后支持了中文索引。全文索引只能在CHAR,VARCHAR,TEXT类型字段上使用,底层使用倒排索引实现。要注意对于大数据量的表,生成全文索引会非常消耗时间也非常消耗磁盘空间。
▌2.索引实现
如右面的模块,索引实现共分4种形式:
- B+树实现:b+树比较适合用作'>'或'<'这样的范围查询,是MySQL中最常使用的一种索引实现。
- R-tree:是一种用于处理多维数据的数据结构,可以对地理数据进行空间索引。不过实际业务场景中使用的比较少。
- Hash:是使用散列表来对数据进行索引,Hash方式不像Btree那样需要多次查询才能定位到记录,因此Hash索引的效率高于B-tree,但是不支持范围查找和排序等功能.实际使用的也比较少。
- FullText:就是我们前面提到的全文索引,是一种记录关键字与对应文档关系的倒排索引。
➔重点讲解二:MySQL调优
MySQL的调优也是研发人员需要掌握的一项技能
一般MySQL调优有图中的4个纬度:
- 针对数据库设计、表结构设计以及索引设置纬度进行的优化;
- 对业务中使用的SQL语句进行优化,例如调整Where查询条件;
- 对mysql服务的配置进行优化,例如对链接数的管理,对索引缓存、查询缓存、排序缓存等各种缓存大小进行优化;
- 对硬件设备和操作系统设置进行优化,例如调整操作系统参数、禁用Swap、增加内存、升级固态硬盘等等。
这四个纬度从优化的成本角度来讲,从左到右优化成本逐渐升高;从优化效果角度来看,从右到左优化的效果更高。
对于研发人员来说,前两个纬度与业务息息相关,因此需要重点掌握,后两个纬度更适合DBA进行深入学习,简单了解就好。