MYSQL基础

一、MySQL逻辑架构

    MySQL的逻辑架构主要包含三层。最上层的应用层,主要基于网络客户端/服务器的工具或者服务,比如连接认证,授权认证,安全等功能。

    第二层是MySQL的核心服务功能层,包括查找解析,分析,优化,缓存以及所有的内置函数等,除此之外,所有的跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。

    第三层是存储引擎层,主要负责MySQL中数据的存储与提取,主要是Innodb存储引擎和MyIsam存储引擎,存储引擎之间不会相互的通信,只会响应上层服务器的请求。注意区分不同存储引擎的优劣。

    具体而言,下图更加清晰。主要包括(由上至下):连接池组件,管理服务和工具组件,SQL接口组件,查询分析器组件,优化器组件,缓存组件,存储引擎,物理文件。

 

二、MySQL中并发控制

    MySQL中的并发控制主要是由锁机制来实现互斥的作用。

  1. 读写锁。读锁(又称为共享锁)是相互不阻塞的,可以允许多个客户在同一时刻读取同一个共享资源;写锁(又称为排他锁)是会阻塞其他的写锁和读锁,主要是为了保证,在同一时刻,一个用户写共享资源,防止其他用户对这个共享资源的读写,以此会造成数据的不一致性。
  2. 锁粒度,提高锁并发性的方式就是让锁定对象更加有选择性,尽量让锁锁定部分数据,而不是所有数据,在一定的资源中,锁定的数据量越少,系统的并发程度越高,相互之间不发生冲突即可。
  3. 锁策略,指的是在锁的开销和数据安全性之间寻找平衡。两种最重要的锁策略是表锁和行级锁。表锁是开销最小的锁策略,一旦锁定就会锁定整个表,只要一个用户对某个表进行插入、删除、更新等操作,就要先获得写锁,同时也会阻塞其他用户对该表的所有读写操作。只有没有写锁的时候,其他用户才可以获得读锁,读锁之间是相互不阻塞的。行级锁是可以最大程度的支持并发处理,当读写的时候,是要对要读取的那一行或者几行进行加锁和解锁。行级锁只有在存储引擎层才实现了,不同存储引擎对其实现也有不同。

三、事务与隔离级别

    事务就是一组原子性的sql语句集合,或者说一个独立的工作单元,当存储引擎能处理完事务中的所有语句,那么才执行改组语句,如果任何一条语句无法执行,则所有语句则不会执行。事务中的语句要么全部执行,要么全部不执行。

    事务的特征:ACID(Atomicity,Consistency,Isolation,Durability)

  1. 原子性,指的是一个事务操作可视为一个不可分割最小工作单元,事务中的语句要么全部提交成功,要么全部回滚
  2. 一致性,指的是一个数据库的状态从一个一致性状态转换到另一个一致性状态,由事务的回滚操作和提交操作保证
  3. 隔离性,指的是两个事务之间的隔离级别(四种)
  4. 持久性,一旦一个事务提交了以后,其所作的修改会永久保留在数据库中

    SQL标准中规定了四种隔离级别,指的是,一个事务的操作对另一个事务是否可见。

  1. (READ UNCOMMITTED)未提交读,一个事务中的修改即使没有提交,对其他事务也是可见的。这种隔离级别一般不用,因为容易产生脏读(指的是事务A修改了某条数据data,此时未提交,然后另一个事务B读取了这条数据data,然后事务A回滚,即不承认对数据data做了修改,此时事务B所读的数据则为脏读)
  2. (READ COMMMITTED)提交读,也成为不可重复读,一个事务从开始到提交之前,所做的任何修改对其他事务不可见。大部分的数据库系统默认为提交读隔离级别。
  3. (REPEATABLE READ)可重复读,保证在同一个事务中多次读取同样的记录结果是一样的(对一条记录而言)。此级别解决了脏读问题,但是无法解决幻读问题(即一个事务读取某个范围内的记录,另一个事务又在该范围中插入新的记录,当前事务再次读取该范围内记录会产生幻行,比如事务A读取了某个范围N条数据,事务B在这个范围内增加M条符合事务A读取条件的数据,当事务A再次读取该范围即会读到M+N条数据)。此级别解决了脏读问题,但是又产生了幻读问题。
  4. (SERIALIZABLE)可串行化,强制事务串行执行,可避免脏读和幻读问题

    多版本并发控制(MVCC)可以看成行级锁的一个变种,他在很多情况下避免了加锁操作,因此开销比普通行级锁更低。不管执行多长时间,MVCC保证每个事务看到的数据都是一致的,为的是解决这个问题:根据事物开始时间不同,每个事务对同一张表,同一时刻看到的数据可能不一样。MVCC有两种机制,乐观并发控制和悲观并发控制。

四、端口

     mysql默认端口3306,利用show global variables like 'port';语句可以查看mysql的端口。通过编辑/etc/my.cnf文件,早期版本有可能是my.conf文件名,增加端口参数,并且设定端口,注意该端口未被使用,保存退出。

五、InnoDB和MylSAM

   

 InnoDBMyISAM
事物支持不支持
表锁支持行级锁仅支持表锁
全文索引不支持(5.6以后支持)支持
聚集索引支持不支持
缓存支持缓存索引和表数据仅支持缓存索引

 

参考 《高性能Mysql》《Mysql技术内幕 InnoDB存储引擎》

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值