在数据库中实现索引,采用的数据结构就是B+ tree,它的特性是:
- 每个结点存了几个值,就由几个子树
- 父节点的元素都存在于子节点中,且是子节点中最大的值或最小的值
- 最下方的叶子节点链表相连(包含database的数据全集)
The edge of B+ tree:
1.height low;
2.便于查找
3.只需非叶子节点的id存储于内存中。
事务
Concept:就是将多个操作打包成一个步骤
rollback(回滚):若其中一个步骤不成功,就会回到初始状态。
code:
start transaction;
若干SQL;
commit;
事务有四大基本特性:
1.原子性:
顾名思义,事务中的步骤不可分割。
2.一致性
前后数据要一致,比如王五装给李四500;李四收到的钱也必须是500
3.持久性
事务的过程记录到磁盘上,一旦执行成功,哪怕是重启主机,也是修改后的状态
4.隔离性
多个事务并发执行所产生的情况。
既然是并发,就是多个事务会同时执行,效率提高的同时也是会trigger 一些问题
- 脏读问题:同学A写代码,同学B偷偷看了一部分,随后同学A又改了代码。
- 不可重复读:同学A写完代码,同学B开始看代码,At the same time ,同学A又开始写代码。
- 幻读:同学B看Z代码,同学A修改Y代码,间接的影响了同学B的result set。
我们需要在实际场景中根据要求来设置这个隔离性和并发性
在MySql中,也是提供以下四个挡位供你选择。
1.read uncommitted(并发性最强)
2.read committed
3.repeatable read
4.serializable (隔离性最强)
可以在my.ini中进行修改挡位。