mysql
总体分层
- 连接层
- 服务层
- 引擎层
- 存储层
逻辑架构组成
- connect连接层
- 业务层
- 可插拔组件式存储引擎
- fileSystem文件存储
分层架构好处
- 哪个出问题找哪个
- 插件式存储引擎,将查询处理其他的任务以及数据的提取互相分离
- 可以根据业务需求和业务的需要选择合适的存储引擎
存储引擎
存储引擎的概念
mysql中数据用各种不同的技术存储在文件(或者内存)中
这些技术的每一种都使用不同的存储机制,索引技巧,锁定水平,提供广泛的不同的功能和能力
通过这选择不同的技术,你能够活的额外的速度或者功能,从而改善你应用的整体功能
这些不同的技术以及配套的相关功能在mysql中被称为存储引擎
例如:如果你在研究大量的临时数据,你也许需要使用内存存储引擎.内存存储引擎能够在内存中存储所有的表格数据
也许需要一个支持事物处理的数据库(以确保事物处理不成功时数据的回退能力)选择支持事物的存储引擎
选择符合自己功能的存储引擎才是最好的
查看存储引擎的sql语句
show ENGINES
查看当前使用存储引擎的sql语句
SHOW variables LIKE '%storage_engine'
MyISAM和InnoDB的区别
MyISAM | InnoDB | |
---|---|---|
主外键 | 不支持 | 支持 |
事物 | 不支持 | 支持 |
行表锁 | 表锁 | 行锁 |
缓存 | 只缓存索引,不缓存数据 | 不仅缓存索引,还要缓存真实数据(对内存要求高) |
关注点 | 性能 | 事物 |
文件结构 | 描述表结构文件,字段长度 数据信息文件存储数据信息 索引文件信息 | 描述表结构文件,字段长度等,存储数据信息和索引信息 |
sql执行的顺序
mysql书写的顺序
mysql读取顺序
from表名->on连接条件->join表名->where查询条件->group分组字段->having分组后条件->select distinct字段->order by排序条件->limimt 查询起始位置,查询条数
join连接
内连接:作用 查询俩张表的共有部分
SELECT * FROM employee e INNER JOIN department d on e.dep_id=d.id
左右连接:把坐标的内容全部查出,右边表只查出满足条件的记录 a和b的共有再加上a的独有
SELECT * from employee e LEFT JOIN department d on e.dep_id=d.id
查询独有数据可以在左右连接加上where id=null
全连接:由于mysql不支持Full Outter Join关键字(Oracle)可以用union把做连接和右连接的内容加到一起
SELECT * from employee e LEFT JOIN department d on e.dep_id=d.id
UNION
SELECT * from employee e RIGHT JOIN department d on e.dep_id=d.id
查询左右各自表独有的数据
SELECT * from employee e LEFT JOIN department d on e.dep_id=d.id where d.id is null
UNION
SELECT * from employee e RIGHT JOIN department d on e.dep_id=d.id where e.dep_id is null