MySQLde 索引:目的:是为了加快查询的速度,避免顺序查找,但是拖慢了插入和删除的速度.,应用在在经常查询,很少少出插入的场景中.
结构:B+树,N叉搜索树,使用链式的结构把每一层的节点连接在一起,叶子节点中保存数据,非叶子节点辅助查找.
主键索引和其他索引的不一样
主键索引叶子节点储存一条一条的数据,借助主键查询,一步到位直接查询到结果.
其他索引储存的是主键的id先根据索引找到主键的id,再拿id在主键索引中查找.
事务:
事务的一个典型应用就是银行转账.
事务就是一组操作的集合.
事务的四个基本特性
1.原子性:事务是不可再分的了,其中包含的操作要么完全正确的执行,要么一次都不执行.
2.一致性:事务执行前后,保持合法性.
3.持久性:事务一旦被执行完,对于数据库的改变是永修性的.对后面的操作是没有任何影响的.
4.隔离性:多个事务执行的时候是并发执行的,事务的内部操作和其他事务是隔离的.
隔离性在并发过程中的一些问题.
1.脏读:值得是在编写代码的时候,我们从中使用了一个属性元素,之后再代码提交的使用有删除了这个属性元素,此时同学在读代码的时候产生的脏读的问题读到了脏的数据.
解决思路:此时我们对隔离性没有过多的要求,为了避免脏读我们在写入的时候加入锁,可以避免脏读.(提高了隔离性,降低了并发).
2.不可复读性:一个事务中读取两次结果不相同.
我在写的代码提交了之后,同学可以读取代码,但是我有改写了代码,同学在读取的时候代码改变了,
解决思路:上面我们对写入操作进行了加锁,避免了脏读,但是不能避免不可重复度,所以我们在读取操作中加入锁操作,可以避免不可从复性.(提高了隔离性,降低了并发性).
3.幻读:对多个事务进行读取的时候结构集不相同.
例如:先头我对Studentzhege类进行了读加锁,但是现在我对Soret进行操作.读取的时候有的同学可以读到Soret这个类,有的同学读取不到.
解决思路:为了解决幻读,我们严格执行"串行化",同学们在读取代码的时候老师休息,不可以更改代码,同学休息的时候老师在去更改代码.这样子并行就完全没有了,直接实行串行化.隔离性最高,多个事务之间完全没有任何影响.