微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql知识点

1.聚簇索引和非聚簇索引的区别

索引类型和存储类型是相关的
1.innodb存储引擎索引和数据存放在ibd文件中,myisam存储引擎存放在myd文件中
2.区分聚簇索引和非聚簇索引的区别,只要区分数据和索引是否存放在一起
3.innodb存储数据,数据和索引必须存放在一起,如果有主键就使用主键,没有就使用唯一键,没有唯一键就使用rowid,因此和数据绑定到一起的就是聚簇索引,而为了避免数据冗余,其他索引的叶子节点也存储了聚簇索引的key值,索引innodb既有聚簇索引也有非聚簇索引,myisam只有非聚簇索引

2.事务的隔离级别

MysqL的事务隔离级别,一共有4中,从低到高,依次为:
读未提交(Read uncommitted)
  如果一个事务开始进行写操作,另一个事务不允许进行写操作。但允许其他事务读取此行数据。该隔离级别可以通过“排他写锁”实现。避免了数据的更新丢失,
  但是,可能会出现“脏读”,就是我一个事务读取到了其他事务未提交的数据
  脏读:事务A开启事务,查询id=1的数据,事务b也开始事务查询id=1的数据,事务a修改这条数据,事务b读取到了事务a未提交的数据
读已提交(Read committed) 解决“脏读”
  读取数据的事务允许其他事务访问该行数据,但是如果是写事务,将会禁止其他事务访问该行。隔离级别避免了脏读,但是有可能出现不可重复读
  不可重复读:事务a先读取了数据,事务b再去修改了这条数据,并且提交,这个时候事务a再去读取数据,发现数据不一致

可重复读(Repeatable read)解决“不可重复读”
  可重复读是指在一个事务内,多次读取同一个数据,在这个事务a还没有结束的时候,另一个事务b也访问该条数据,即使这个事务b修改了这条数据,事务a两次读取到的结果也是一样的,所有叫可重复读。
  但是有可能出现“幻读”
幻读:事务a先开启事务,查询id=1的数据,发现不存在,事务b也开启事务,查询id=1的数据,发现也不存在,事务b这个时候添加了这条数据,然后进行了提交,事务a这个时候再去添加这条数据,发现添加不上也查找不到
序列化(Serializable)解决“幻读”
  提供了严格的事务隔离,事务只能一个一个进行,不能并发操作,但是对性能会有一定的影响
https://www.cnblogs.com/bkhdd/p/15262342.html

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐