【MySQL】索引和事务的详细介绍

目录

一.索引

1.索引概念

2.查看索引

3.创建索引

4.索引使用的数据结构是什么

1.HASH(不是)

 2.二叉搜索树(不是)

3.B树   N叉数(不是)

 4.B+树(是滴)

 5.组合索引

 6.索引覆盖

7.回表查询

8.索引失效

二.事务

1.概念:

2.事务的使用

1.开启事务:start transaction; 

2.执行多条SQL语句

3.回滚或者提交:rollback/commit;

以rollback为例:

3.事务的特性(ACID)

1.原子性

 2.一致性

3.隔离性

4.持久性

4.事务的隔离级别

1.多个事务之间是否会相互影响

2.read uncommitted: 读未提交

 3.read committed: 读已提交

4.repaeteble read 可重复读

 5.隔离级别的总结


一.索引

1.索引概念

2.查看索引

show index from course;

3.创建索引

 

create index index_course_name on course(name);

4.索引使用的数据结构是什么

1.HASH(不是)

 

 2.二叉搜索树(不是)

       因为无法降低树的高度 

3.B树   N叉数(不是)

 4.B+树(是滴)

 5.组合索引

针对WHERE


create index index_name_qqemail on student(name,qq_mail);
select * from student where name = '许仙' and qq_mail = 'xuxian@qq.com';

 

 6.索引覆盖

select name,qq_mail from student where name = '许仙' and qq_mail = 'xuxian@qq.com';

7.回表查询

explain select name,qq_mail from student where name = '许仙' and qq_mail = 'xuxian@qq.com';
explain select * from student where qq_mail = 'xuxian@qq.com';

 

8.索引失效

二.事务

1.概念:

事务就是把一组SQL语句打包运行的机制

要么全部都执行成功,要么全都不执行

2.事务的使用

以下列表为例:

1.开启事务:start transaction

2.执行多条SQL语句

3.回滚或者提交:rollback/commit;

rollback即全部失败 ,commit即全部成功

以rollback为例:

在事务还未回滚之前添加以及查询数据结果如下:

 在事务还未回滚之后查询数据结果如下:

可以看到回滚后在事务中添加的数据并未运行成功

3.事务的特性(ACID)

1.原子性

 

 2.一致性

3.隔离性

 

4.持久性

 

4.事务的隔离级别

1.多个事务之间是否会相互影响

2.read uncommitted: 读未提交

脏读是指用户第一次读到了事务没有提交的数据,当事务回滚之后,再次查询发现没有这条数据了

 图例如下:

 那么我们怎么解决这个问题呢?

答案就是加锁

但是写锁解决了脏读的问题,并不能解决重复读的问题

 3.read committed: 读已提交

此时产生了新的问题,不可重复读

不可重复读是指在开启一个事务后,两个相同的查询结果出现了不同的现象

 图例如下:

 

 那么我们怎么解决这个问题呢?

答案还是加锁,不过这次加的是读锁

4.repaeteble read 可重复读

这样就解决了不可重复读的问题

 图例如下:

 

 serializable的隔离级别解决了这个问题,但随之而来性能也降到了最低

 5.隔离级别的总结

说明:MySQL已经很好地解决了 repaeteble read 可重复读 隔离级别下产生的幻读问题,所以我们可以放心使用

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值