数据库优化学习笔记(三)

数据库优化学习笔记(二)学习下mysql的基本语句,常用结构,接下来涉及到mysql的事物管理,索引、存储过程、使用函数与触发器等深入一点的东西。

MYSQL的事务管理

mysql整体功能分为两部分:外层部分和内层部分。外层部分负责和客户端连接以及检测输入的mysql语句是否有语法错误。内层部分负责完成实际的检索以及文件操作。

内层部分就是指的mysql的存储引擎,常见引擎有:

MyISAM:默认高速引擎,不支持事务处理。

InnoDB:支持行锁定以及事务处理,比MyISAM的处理速度稍慢。

Falcon:一种新的存储引擎,支持事务处理。

CSV:以CSV形式保存数据。


mysql事务管理内部机制使用UNDO和REDO两个日志来进行的,不是实时和硬盘进行数据交换,所以数据回滚或者提交都是针对日志文件和硬盘的操作。

什么是事务管理?

事务管理就是将一系列的mysql操作看成一个整体,整体中只要某一个失败了,就全部算失败,数据回滚到一开始的状态,只有都成功了数据库才会发生变化。也就是上面说的日志文件对硬盘进行真正的操作。

什么是锁定?


当同一个数据被多个用户操作时,会发生数据冲突,导致数据发生错误。为避免这种情况发生,规定在一个用户操作某一数据时,其他人只能读取不能修改数据或者读都不能读取。


锁定分两种:


共享锁定:当用户对对象数据进行锁定时,其他人只能读,不能写。


排他锁定:当用户对对象数据进行锁定时,其他人不能读,不能写


什么是分离水平?

分离水平是用来确定事务之间的影响程度。分离水平越高,整合性越高 ,运行性越低。分离水平越低,整合性越低 ,运行性越高。(整合性是指数据不发生冲突或者错误的概率)


事务处理的分离水平

假设A事务与B事务同时进行:

脏读:A事务在事务过程中操作了某个数据,但是还没COMMIT,B事务读取到了该数据,即使A还没提交。

不可重复读:B事务在读取某数据时,前后读取了两次,中间隔了3秒,在第2秒时,A事务改变了该数据,导致B事务前后两次读取的数据不一样。

幻象读取:B事务在读取某数据时,前后读取了两次,中间隔了3秒,在第2秒时,A事务增加了新的数据或删除了原有数据,导致B事务前后两次读取的数据不一样,多出了新的数据(或少了数据)。解决方法是在A改变数据前,要求一直等待,知道B事务提交了A事务才有权限改变数据。

死锁:在幻象读取中,会出现A事务和B事务同时修改某个数据的情况,这个时候双方会互相等待对方结束事务,造成死锁,双方事务都无法进行。解决方法是对某一方事务进行锁定强制解除,并回滚数据,另外一方正常事务。

以上是部分事务管理知识,实际用起来肯定会遇到很多坑,遇到再说吧。接下来是索引知识。

你可能感兴趣的:(数据库优化学习笔记(三))