MYSQL基础
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MYSQL基础,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3908字,纯文字阅读大概需要6分钟。
内容图文
![MYSQL基础](/upload/InfoBanner/zyjiaocheng/914/9a31014c5c144407a3e785cf1fa92268.jpg)
一、MySQL逻辑架构
MySQL的逻辑架构主要包含三层。最上层的应用层,主要基于网络客户端/服务器的工具或者服务,比如连接认证,授权认证,安全等功能。
第二层是MySQL的核心服务功能层,包括查找解析,分析,优化,缓存以及所有的内置函数等,除此之外,所有的跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。
第三层是存储引擎层,主要负责MySQL中数据的存储与提取,主要是Innodb存储引擎和MyIsam存储引擎,存储引擎之间不会相互的通信,只会响应上层服务器的请求。注意区分不同存储引擎的优劣。
具体而言,下图更加清晰。主要包括(由上至下):连接池组件,管理服务和工具组件,SQL接口组件,查询分析器组件,优化器组件,缓存组件,存储引擎,物理文件。
二、MySQL中并发控制
MySQL中的并发控制主要是由锁机制来实现互斥的作用。
- 读写锁。读锁(又称为共享锁)是相互不阻塞的,可以允许多个客户在同一时刻读取同一个共享资源;写锁(又称为排他锁)是会阻塞其他的写锁和读锁,主要是为了保证,在同一时刻,一个用户写共享资源,防止其他用户对这个共享资源的读写,以此会造成数据的不一致性。
- 锁粒度,提高锁并发性的方式就是让锁定对象更加有选择性,尽量让锁锁定部分数据,而不是所有数据,在一定的资源中,锁定的数据量越少,系统的并发程度越高,相互之间不发生冲突即可。
- 锁策略,指的是在锁的开销和数据安全性之间寻找平衡。两种最重要的锁策略是表锁和行级锁。表锁是开销最小的锁策略,一旦锁定就会锁定整个表,只要一个用户对某个表进行插入、删除、更新等操作,就要先获得写锁,同时也会阻塞其他用户对该表的所有读写操作。只有没有写锁的时候,其他用户才可以获得读锁,读锁之间是相互不阻塞的。行级锁是可以最大程度的支持并发处理,当读写的时候,是要对要读取的那一行或者几行进行加锁和解锁。行级锁只有在存储引擎层才实现了,不同存储引擎对其实现也有不同。
三、事物与隔离级别
事物就是一组原子性的sql语句集合,或者说一个独立的工作单元,当存储引擎能处理完事物中的所有语句,那么才执行改组语句,如果任何一条语句无法执行,则所有语句则不会执行。事物中的语句要么全部执行,要么全部不执行。
事物的特征:ACID(Atomicity,Consistency,Isolation,Durability)
- 原子性,指的是一个事物操作可视为一个不可分割最小工作单元,事物中的语句要么全部提交成功,要么全部回滚
- 一致性,指的是一个数据库的状态从一个一致性状态转换到另一个一致性状态,由事物的回滚操作和提交操作保证
- 隔离性,指的是两个事物之间的隔离级别(四种)
- 持久性,一旦一个事物提交了以后,其所作的修改会永久保留在数据库中
SQL标准中规定了四种隔离级别,指的是,一个事物的操作对另一个事物是否可见。
- (READ UNCOMMITTED)未提交读,一个事物中的修改即使没有提交,对其他事物也是可见的。这种隔离级别一般不用,因为容易产生脏读(指的是事物A修改了某条数据data,此时未提交,然后另一个事物B读取了这条数据data,然后事物A回滚,即不承认对数据data做了修改,此时事物B所读的数据则为脏读)
- (READ COMMMITTED)提交读,也成为不可重复读,一个事物从开始到提交之前,所做的任何修改对其他事物不可见。大部分的数据库系统默认为提交读隔离级别。
- (REPEATABLE READ)可重复读,保证在同一个事物中多次读取同样的记录结果是一样的(对一条记录而言)。此级别解决了脏读问题,但是无法解决幻读问题(即一个事物读取某个范围内的记录,另一个事物又在该范围中插入新的记录,当前事物再次读取该范围内记录会产生幻行,比如事物A读取了某个范围N条数据,事物B在这个范围内增加M条符合事物A读取条件的数据,当事物A再次读取该范围即会读到M+N条数据)。此级别解决了脏读问题,但是又产生了幻读问题。
- (SERIALIZABLE)可串行化,强制事物串行执行,可避免脏读和幻读问题
多版本并发控制(MVCC)可以看成行级锁的一个变种,他在很多情况下避免了加锁操作,因此开销比普通行级锁更低。不管执行多长时间,MVCC保证每个事物看到的数据都是一致的,为的是解决这个问题:根据事物开始时间不同,每个事物对同一张表,同一时刻看到的数据可能不一样。MVCC有两种机制,乐观并发控制和悲观并发控制。
四、端口
mysql默认端口3306,利用show global variables like 'port';语句可以查看mysql的端口。通过编辑/etc/my.cnf文件,早期版本有可能是my.conf文件名,增加端口参数,并且设定端口,注意该端口未被使用,保存退出。
五、InnoDB和MylSAM
InnoDB | MyISAM | |
事物 | 支持 | 不支持 |
表锁 | 支持行级锁 | 仅支持表锁 |
全文索引 | 不支持 | 支持 |
聚集索引 | 支持 | 不支持 |
缓存 | 支持缓存索引和表数据 | 仅支持缓存索引 |
参考 《高性能Mysql》《Mysql技术内幕 InnoDB存储引擎》
内容总结
以上是互联网集市为您收集整理的MYSQL基础全部内容,希望文章能够帮你解决MYSQL基础所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。