MySQL学习笔记(一)MySQL简介

MySQL简介

什么是MySql?
首先,我们要知道什么是 Mysql ​​​​​​​ 
其实我们在开发的时候,我们都需要对业务数据进行存储,这个时候,你们就会用到Mysql oracal 等数据库。

MySQL其实是一种关系型数据库,什么是关系型数据库?关系表数据库,由表结构来存储数据与 数据之间的关系,同时用sqlStructured query language) 翻译过来叫做 结构化查询语句 来进行数据操作。

为什么使用MySQL?

1.免费且开源

2.生态完整

3.支持事务

4.使用工况全分析

架构

客户端:用来连接服务端执行对应SQL

服务端:解析命令执行增删查改的对应逻辑

存储引擎:真正去用来存储数据

ACID:原子性、可靠性、持久性、一致性

Sql执行大流程

解析器:解析SQL预计,会把一条SQL语句解析语法树,判断是否符合语法

词法解析:将SQL打碎,转化成一个一个关键词,交给词法解析器去构建语法树,判断语法是否正确。

语法解析语法解析已经知道每个sql语句的单词了,那么在语法解析的时候,会去检查语法是否正确,比如,where是不是写出where1,from写成from1. 表名、列名是否存在、用户是否有操作权限等等。

如果写错了直接抛出错误,否则解析成如下的语法树。

预处理:我们就是在拼接sql语句的时候,将用户的输入跟语句拼接成一个sql语句给到mysql执行。   但是这样会引发一个问题:SQL注入

SQL注入:因为参数是客户端传过来的,所以可以传任何值,那么就有可能传入任何值就有了sql注入问题

例:

select * from table where id={id}

传入参数
1;select * from table limit 10 


select * from table where id=1; select * FROM product LIMIT 10
预处理操作解决SQL注入
prepare pre_table from 'select * from teacher where id=? and age=?'; 
set @id=10;
set @age=34;
execute pre_table using @id,@age;

drop prepare pre_table ;
sql 注入是因为客户端拼接用户传入的参数,然后拼接好语句给到 mysql
这样会导致会安全问题。
优化器 根据上面的流程,我们知道要去执行什么语句;但是具体怎么执行会有很
多的方式,比如走哪个索引,你的语句是不是可以优化
执行器:根据执行计划,去调用不同存储引擎的API接口获取数据

存储引擎

其中最常用的就是InnoDB和MyISAM

InnoDB InnoDB 是一个事务安全 ( 兼容 ACID)的MySQL 存储引擎,具有提交、回滚和崩溃恢复功能,以保护用户数据。 InnoDB行级别的锁 ( 没有升级到更粗粒度的锁 ) oracle 风格一致的非锁读取提高了多用户并发性和性能。InnoDB 将用户数据存储在聚集索引中,以减少常见的基于主键的查询的I/O 。为了维护数据的完整性, InnoDB 还支持外键引用完整性约束。
MyISAM   这些表占用空间很小。表级锁限制了读 / 写工作负载的性能,因此它经常用于Web 和数据仓库配置中的只读或以读为主的工作负载中。
两者的对⽐:
1. 是否⽀持⾏级锁 : MyISAM 只有表级锁 (table-level locking) ,⽽ InnoDB ⽀持⾏级锁 (row
level locking) 和表级锁 , 默认为⾏级锁。
2. 是否⽀持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原⼦性 , 其执⾏
速度⽐ InnoDB 类型更快,但是不提供事务⽀持。但是 InnoDB 提供事务⽀持事务,外部键等
⾼级数据库功能。 具有事务 (commit) 、回滚 (rollback) 和崩溃修复能⼒ (crash recovery
capabilities) 的事务安全 (transaction-safe (ACID compliant)) 型表。
3. 是否⽀持外键: MyISAM 不⽀持,⽽ InnoDB ⽀持。
4. 是否⽀持 MVCC :仅 InnoDB ⽀持。应对⾼并发事务 , MVCC ⽐单纯的加锁更⾼效 ;MVCC
READ COMMITTED REPEATABLE READ 两个隔离级别下⼯作 ;MVCC 可以使⽤ 乐
(optimistic) 锁 和 悲观 (pessimistic) 锁来实现 ; 各数据库中 MVCC实现并不统⼀。
InnoDB表空间的 数据存储结构
segement(段): 段是表空间的分区,一个表空间中,会有多个段组成,常见的短有数据 段、索引段
 
extent(区): 区来管理页,当页的大小在 16K 以下,一个区的大小是 1M ,如果 32K 2M,64K 则为 4M 。后面磁盘释放分配都是以区为单位 所以,一个extent 下最少可以存储 64 page
 
page( 页):page 页,默认大小16KB
行( Rows): 最大行长度略小 于数据库页面大小的一半
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值