mysql知识点

2022/7/14 2:20:05

本文主要是介绍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

 



这篇关于mysql知识点的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程