MySQL的事务特性
1.原子性:原子性就是这个事件要么执行完,要么没执行,不会存在中间状态,与C++中华那个加锁避免多线程竞争是一个道理;
2.一致性:保持事件的操作对象双方某数据之和是不变的,就以转账为例,A转给B100块,那么A的余额多100,B的余额就必须少100;
3.隔离性:隔离就是独立的,A事件正在进行时,B事件是看不到A时间的变化过程的,只能看到A事件的起始和结束状态;
4.持久性:事务提交上的数据会被永远的保存到数据库中,即便系统突然崩溃数据也不会发生变化;
MySQL索引
MySQL索引种类
普通索引:没有什么限制,可以字段中可以出现多个重复的数据,也可以为空
唯一索引:字段中的数据不可以重复,但是可以为空,前提是该字段可以为空
主键索引:通常在建表的时候就会加上的索引,就以主键类比即可,唯一+不为空
组合索引:某两个字段通常会被配合一块查询,所以就同时组合加上索引
全文索引:知道即可
索引原理
B树数据结构;
先不说什么是B树,我们就谈谈元组在表中的存储是什么数据结构--->指针数组
每一个指针指向一个元组;所以我们查找某一项数据的时候不就需要遍历数组吗;那遍历数组的复杂度不就是On吗,
对吧,先不说什么是索引,就单看现在你面前有个数组,你要查询,你怎么优化;
-->树型结构,对吧!
我们都知道搜索二叉树的就是用来查找的树型结构,一般时间复杂度是Ologn,对吧这就实现了优化,
那么回到上面的问题,我们该如何优化查找元组,就是一个优化数组搜索的问题罢了;
在MySQL中不是用的二叉搜索树,而是用的B树,先简单说一下B树也是一个树,只不过是跟二叉搜索树不一样罢了,不要以为是什么高大尚的数据结构;我们先简单把他理解成是多叉树!!
那么我们先想想为什么不用二叉搜索树呢?-->效率问题!!!
>我们先来划分一下立场,二叉搜索树搜索的数据是不是在内存中,内存中搜索是不是很快;
我们再来看看数据库查找数据是在哪里,回答我!!!!是不是在硬盘上进行IO啊,他是与硬件交互的,怎么跟内存中茶轴相比,a?对不对?
那二叉搜索树,可不可以在进行优化一下,毕竟二叉搜索树他在搜索他也就两个叉,我如果用多个叉来构建数据结构,是不是会更加的便捷;从树的形态上看,树的高度是不是就会变低,宽度变大,这意味这什么?这意味着我搜索数据可以少走弯路了,对不?
所以知道为什么不用二叉搜索树了吧,但是多叉树是一个十分宽泛的词, 对不,为什么要专门为二叉搜索树起名叫二叉搜索树的呢,对吧,那么我们多叉搜索树也要有个范!!!
-->就叫做b树,懂了吧!!!!
集体b树的实现可分为多维的,可以是3维,4维,意思就是一个节点分治是3个4个罢了;
所以,懂了吧!!!