MYSQL解析2017/5/24

来源:互联网 发布:免费看书软件哪个好 编辑:程序博客网 时间:2024/04/30 21:13

逻辑的框架

@2017/5/24

mysql怎么进行权限设置:

如果使用了安全套接字(SSL)的方式连接,还可以使用X.509证书认证,一旦客户端连接成功,服务器会继续验证该客户端是否具有某个

执行的权限(例如:是否允许客户对word数据中的table1表进行数据select 查询)

验证mysql是否进行权限设置ssl,执行以下代码

SHOW VARIABLES LIKE 'have_openssl';

  1. +---------------+-------+  
  2. | Variable_name | Value |  
  3. +---------------+-------+  
  4. | have_openssl  | YES   |  
  5. +---------------+-------+  


如果值为YES,服务器支持OpenSSL连接。

对于select语句,在解析查询之前,服务会先查询query CAche,如果能查询到对应的数据,服务器就不必在执行查询解析,优化和执行过程,

而直接返回查询缓存中的结果集。

@表锁和行锁

行级锁,大家一定都听到过,也肯定比较喜欢。对于mysql,InnoDB预设的是Row-level Lock,但是,需要明确的指定主键,才会执行行级锁,否则执行的为表锁

比如:

select * from job_info where id = 1 for update;  

那么上面这句,为行级锁。

而 select * from job_info where job_name = 'test' for update;

这句,就变成了表锁了。。。。

2.jpa如何搞 select for update。

也是醉了,在Dao层的方法上,要配置Lock的注解。并且要加上LockModeType.PESSIMISTIC_WRITE,这个就相当于for update了。大家也可以在程序运行时,打印出的sql中看到。 这个东东,得益于 (http://suene.iteye.com/blog/1756295  Spring Data JPA,基础学习笔记.) 该文章


行级锁只在存储引擎层实现。

@事物

事物的4个特性:原子性,一致性, 隔离性,持久性

事物是否执行判断存储引擎是否支持事物

事物的隔离级别:有4个

读未提交:允许脏读,允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事

读提交:允许不可重复读取,但不允许脏读取

可重复读:禁止不可重复读取和脏读取,但是有时可能出现幻影数据

幻读:当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻像读问题。事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其它事务删除。同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中






默认使用的的级别是可重复读

在使用注解@Transaction();中进行级别设置时使用isolation=设置

自动提交(AUTOCOMMIT)

Mysql默认采用自动提交(AUTOCOMMIT)模式,如果不是显示地开始一个事物,则每个查询都被当做一个事物执行提操作,

可以通过设置AUTOCOMMIT变量来启用或则禁用自动提交模式。

SHOW VARIABLES LIKE "AUTOCOMMIT";


1或ON 表示启用,0或off表示禁用。

MYSQL可以通过执行SET TRANSACTION ISOLATION LEVEL 命令来设置隔离级别。

举例:

SET TRANSACTION LEVEL READ COMMITTED

InnoDBMVCC

SELECT

InnoDB进行select 的查询记录

a:行的系统号小于或者等于当前系统的版本号,b:行的删除版本号要么没定义,要么删除版本号大于当前系统的版本号

INSERT

InnoDB为新插入的每一行保存当前系统的版本号为行版本hao

DELETE

InnoDB为删除每一行保存当前版本号为删除标识版本号

UPDATE

InnoDB 为插入一行新的记录,保存当前系统号为行版本号,同时保存当前系统版本号到原来的行作为行删除标记

MVCC只有在REPEABLE READ和READ COMMITTE俩个隔离级别下工作

@MYSQL的存储引擎InnoDB

使用show table status 命令显示表的相关信息

mysq:show table status like ''表名''

查询出来的结果:




Engine:表的存储引擎类型,为InnoDB

Row_format:行的格式

Rows:表中的行数

Avg_row_length:平均每行所包含的字节数

Data_length:表数据的大小(以字节为单位)

Data_free:表示已分配但是目前没有使用的使用的空间,也包括删除的空间,以及后续可以被insert利用的空间。

auto_inccreament :下一个自动增长的数据

create_time:这个表创建的时间

@mysql存储引擎MYlSAM存储引擎

在mysql 5.1之前的版本,MyISAM是默认的存储引擎。MYISAM存储引擎提供了大量的特性,包括全文索引,

压缩,空间函数(GIS),MyISAM不支持事物和行级锁,而且有一个毫无疑问的缺点就是数据崩溃后无法恢复,

存储:MYlSAM会将数据存储在2个文件中一个是数据文件一个是索引文件。

MylSAM特性:

加锁与并发:MYiSAM对整张表加锁,而不是针对行。

修复:对MYISAM表,MYISAM可以手动和自动修复操作,这里的修复和事物的恢复是不同的概念。

创建索引,支持全文索引。

MYISAM压缩表:如果一个表在创建并导入数据以后,不会再进行修改操作,那么这样的表或许适合采用压缩表。

MYISAM性能:MYISAM引擎设计简单,数据以紧密格式存储,在某些场景下性能还是比较好的

@MYSQL内建的其他存储引擎

Archive引擎

Blackhole引擎

CSV引擎

Federated引擎

Mermory引擎

Merge引擎

NDB集群引擎

@第三方的存储引擎

@选择合适的引擎

事物:如果应用需要事物的支持,那么InnoDB(或者XtraDB)是目前最稳定并且经过验证的选择,

如果不需要事物,并且主要是select 和Insert操作,那么MYISAM是很好的选择

备份:手动备份那个引擎都可以,线上备份需要选择InnoDB

崩溃数据:MYISAM崩溃后发生损坏的概率比InnoDB要高很多,而且恢复的速度比较慢

真正的测试模拟:


原创粉丝点击