MySQL Innodb存储引擎简介

Innodb做为第三方公司所开发的存储引擎,和MySQL遵守相同的开源License协议。

一、功能方面的特点

1、支持事务安全
Innodb在功能方面最重要的一点就是对事务安全的支持,这无疑是让Innodb成为MySQL最为流行的存储引擎之一的一个非常重要原因。而且实现了SQL92标准所定义的所有四个级别(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE)。对事务安全的支持,无疑让很多之前因为特殊业务要求而不得不放弃使用MySQL的用户转向支持MySQL,以及之前对数据库选型持观望态度的用户,也大大增加了对MySQL好感。

2、数据多版本读取
Innodb在事务支持的同时,为了保证数据的一致性以及并发时候的性能,通过对undo信息,实现了数据的多版本读取。

3、锁定机制的改进
Innodb改变了MyISAM的锁机制,实现了行锁。虽然Innodb的行锁机制的实现是通过索引来完成的,但毕竟在数据库中99%的SQL语句都是要使用索引来做检索数据的。所以,行锁定机制也无疑为Innodb在承受高并发压力的环境下增强了不小的竞争力。

继续阅读MySQL Innodb存储引擎简介

MySQL自带工具

1、mysql
mysql的功能和Oracle的sqlplus一样,为用户提供一个命令行接口来操作管理MySQL服务器。
不太常用但有用的参数:
1)-e, --execute=name参数
这个参数是告诉mysql,我只要执行“-e”后面的某个命令,而不是要通过mysql连接登录到MySQL Server上面。
mysql -uroot -p123456 -e "show databases"
2)-E, --vertical参数
登入之后的所有查询结果都将以纵列显示,效果和我们在一条query之后以“\G”结尾一样
3)--prompt=name参数
其主要功能是定制自己的mysql提示符的显示内容。在默认情况下,我们通过mysql登入到数据库之后,mysql的提示符只是一个很简单的内容“mysql>”,没有其他任何附加信息。非常幸运的是mysql通过“--prompt=name”参数给我们提供了自定义提示信息的办法,可以通过配置显示登入的主机地址,登录用户名,当前时间,当前数据库schema,MySQL Server的一些信息等等。
4)--tee=name参数
用来告诉mysql,将所有输入和输出内容都记录进文件。在我们一些较大维护变更的时候,为了方便被查,最好是将整个操作过程的所有输入和输出内容都保存下来。有了“--tee=name”参数,就再也不用通过copy屏幕来保存操作过程了。

继续阅读MySQL自带工具

MySQL处理sql语句过程

在MySQL中,将客户端请求分为了两种类型:
一种是query,需要调用Parser也就是Query解析和转发模块的解析才能够执行的请求;
一种是command,不需要调用Parser就可以直接执行的请求;

当客户端请求和连接线程“互换暗号(互通协议)”接上头之后,连接线程就开始处理客户端请求发送过来的各种命令(或者query),接受相关请求。

连接线程将收到的query语句转给Query解析和转发模块,Query解析器先对Query进行基本的语义和语法解析,然后根据命令类型的不同,有些会直接处理,有些会分发给其他模块来处理。

如果是一个Query类型的请求,会将控制权交给Query解析器。Query解析器首先分析看是不是一个select类型的query,如果是,则调用查询缓存模块,让它检查该query在query cache中是否已经存在。如果有,则直接将cache中的数据返回给连接线程模块,然后通过与客户端的连接的线程将数据传输给客户端。如果不是一个可以被cache的query类型,或者cache中没有该query的数据,那么query将被继续传回query解析器,让query解析器进行相应处理,再通过query分发器分发给相关处理模块。

继续阅读MySQL处理sql语句过程