mysql索引事务总结

索引的概念:索引是一种特殊的文件,包含着数据库表里的所有记录的引用指针,可以对表中的一列或多列创建索引。
索引的作用:

1,数据库中的表,数据,索引之间的关系,类似于书架上的书籍,书籍内容和书籍目录之间的关系。
2,索引所起的作用类似于书籍目录,可用于快速定位,检索数据
3,索引对于提高数据库的性能有很大的帮助

索引的数据结构类型:
数据库的索引主要为B+数。
B+数:
1,父节点里面的值,为作为子节点的最大值出现
2,叶子结点按照顺序通过链表的方式连接起来
3,非叶子结点仅仅包含索引列的数据,非叶子结点放在内存上,每一行的信息存放在叶子结点上,叶子结点放在内存上。后续查找主要是去读内存,减少读磁盘
**什么是事务:**例如银行转账,张三给李四转帐,只有当张三的钱转走了,并且李四账户的钱收到了才会事务提交,否则事务会回滚到转账前的状态,保证数据的一致性,保证数据不会出错。
事务的特性:
1,原子性:整个事务要么成提交成功要么回滚。
2,一致性:事务执行前后,数据都是合理的。
3,持久性:事务执行完毕后,数据就存在磁盘上,那怕关机重启数据仍然存在。
4,隔离性:并发执行事务所产生的问题
~并发:宏观上看起来同时执行,微观上不是同时执行,而是通过cpu进行快速切换实现的。
~并行:宏观上(用户看起来)看起来是同时进行,微观上(cpu执行)也是同时执行,依赖多核cpu
~并发和并行都是微观上的,用户看起来都是同时进行的。
不可重复读:
事务a修改数据然后提交,提交完毕后事务b开始读数据。
事务b中包含了很多次的读操作,如果事务b两次读操作得到的结果都不一样,就是不可重复度。
不一样的原因就是事务a虽然把数据已经提交了,但是可能又把这个数据修改了,事务b第一次读到的数据是事务a提交的,第二次读到的数据事务a又提交了一次。
解决不可重复读问题:
给读操作加锁,别人读代码时就不能修改了,对并发做出了一定的限制。
幻读:
引入读加锁和写加锁之后,在这个时候要同学们把代码读完我才能改student类,虽然我没改student类,但是同学们读的时候就会发现突然冒出来一个teacher类来~幻读
解决幻读问题
引入读加锁
脏读
一个事务a正在修改数据,另一个事务b在读取a的数据,此时b读取到了a的中间数据这个就是脏读(就是别人不经意间看到了你在敲代码)
解决脏读问题
给写操作加锁,就比如当你写代码时,不想让别人看到,写完之后上传到码云才能看。
mysql之中的事务的隔离级别
四种隔离级别:
引入写加锁(read committed相当于进行了写加锁),脏读就不存在了,不可重复读和幻读还存在。
引入读加锁(),不可重复读和脏读就不存在了,幻读还在。
引入串行化,三个问题都解决了。
1)read uncomitted没有做任何的隔离机制,三个问题都存在
2)read committed相当于进行了写加锁,并发程度降低了,隔离级别就提高了,此时脏读问题就解决了,
3)repeatable相当于读,写都加锁,并发程度又降低了,隔离程度又提高了,此时脏读和不可重复读都解决了,幻读还存在,mysql的默认级别。
4)serializable串行化,并发程度最低,隔离级别最高,此时三个问题都解决了,执行效率最低的方式。
MySQL默认的事务隔离级别是Repeatable Read(可重复读)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值