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