MySql高级
MySql基础
数据库的概述:是一个数据管理系统
存储:按照特定的规则存储
管理:sql增删改查操作
数据库的类型:
关系型数据库
非关系型数据库
数据库的环境搭建:
安装服务器端(sqlyog)
可视化客户端工具
sql:
DDL:创建数据表结构
DML:对数据的增,删,改
DQL:对数据的查询(查询结果的处理:排序,多表关联,条件查询,模糊查询,数量限制,分组,函数)
MySql高级
MySql引擎
引擎就是数据库在处理数据时的机制
不同的引擎执行策略/机制不同
不同的需求选用不同的引擎,达到最优选择
查询mysql支持的引擎 Show Engines;
修改引擎
方式1:将mysql.ini中default-storage-engine=InnoDB,重启服务.
方式2:(建表时修改) Create table 表名(…)Engine = MYSIAM;
方式3:(建表后修改) Alter table 表名 Engine = INNODB;
InnoDB
InnoDB是一个事务型的存储引擎,有行级锁和外键约束
特点:处理大容量数据库系统,支持事务,并发大,支持外键约束,主键自增(以前版本不支持全文检索)
适用场景:需要数据库事务时,经常更新的表,处理多重并发的更新请求,只有他支持外键;支持自增列属性auto_increment。
MyISAM
当Insert(插入)或Update(修改)数据时,即写操作需要锁定整个表,效率会低一些。查询快
特点:不支持事务,不支持外键,不支持行级锁
适用场景:读操作远远大于写操作且不需要数据库事务的支持
查询快
索引
方便数据的查询类似于书中的目录
创建索引的目的是为了优化数据库的查询速度。其中,用户创建的索引指向数据库中具体数据所在位置。当用户通过索引查询数据库中的数据时,不需要遍历所有数据库中的所有数据。这样,大幅度提高了查询效率。
索引类似于书的目录,在一本书前面加上目录,查找内容时不必逐页翻阅就能够快速地找到所需的内容。借助索引,执行查询时不必扫描整个表就能够快速地找到所需要的数据。
优点: 方便查询,降低了IO成本
缺点: 索引也需要占用磁盘空间,同时会降低表的更新速度,修改,删除,新增时需要对索引进行维护(例:删除某条 数据时,索引也要做出改变)
索引分类:
主键索引:设定为主键后数据库会自动建立索引
Alter table 表名 add Primary Key 表名(列名);
删除主键索引:
Alter table 表名 drop Primary Key;
单值索引:即一个索引只包含单个列,一个表可以有多个单列索引,
创建单值索引:
Create Index 索引名 on 表名(列名);
删除索引:
Drop index 索引名;
唯一索引:索引列的值必须是唯一,允许为null
创建单值索引:
Create Unique index 索引名 on 表名(列名);
删除索引:
Drop index 索引名;
复合索引:一个索引包含多个列 ,在数据库操作期间,复合索引比单值索引所需要的开销更小(对于相同的多个列建索引),当表的行数远大于索引列的数目时可以使用复合索引
创建符合索引:
Create index 索引名 on 表名(列1,列2,……);
查看表的索引 Show index from 表名;
索引创建原则:
适合创建索引的情况:
- 主键
- 外键
- 频繁作为查询条件的字段(where后的语句)
- 排序字段
不适合创建索引的情况:
- 表记录太少(例:年级表)
- 经常增删改的表
- 不做为查询条件的(where条件用不到的)
- 重复数据非常多的(例:性别)
索引数据结构:
索引数据结构:B+Tree
B+树:一个结点可以存储多个数据,非叶子结点只存储索引,不存数据
所有数据都在叶子结点存储,而且数据与数据之间有连接(像链表一样)
叶子结点之间有连续性,适合范围查询( id>15)
树的高度固定,查询快
不用哈希结构:虽然快,但是散列的不连续,条件范围查询不适应(例:id>10)
拿主键索引举例:如果使用树,红黑树(