InnoDB、MyISAM
?
select多,用MyISAM;
其他操作多,用InnoDB
每张表都有三个文件
.frm 表结构文件,存放的是表结构信息
.MYD 数据文件,存放的是表数据及每行数据对应在磁盘中的地址
.MYI 索引文件 里面存放了设置的索引及与MYD文件相对应的磁盘地址
每张表都有.frm文件
而索引及索引数据有两种存储方式:
进入mysql安装目录,通过my.ini查找存储位置可发现idbdata1,
每个表都对应有一个.idb文件
表的索引及索引对应行的数据都存放到这里了
判定条件除了上面看文件外,还可以通过执行sql查询
SHOW VARIABLES LIKE ‘innodb_file_per_table‘;
value=off就代表是非独立表空间
非聚簇索引:索引和索引数据存储在两个文件中(MyISAM就是)
结构图如下:
聚簇索引:索引和索引数据存储在一个文件中(InnoDB就是)
结构图如下:
?
单值索引、联合索引
两个线程执行流程:
a线程将id=1的 字段1设置为10
b线程读取id=1的 字段1 数据 10
a线程对第一步操作进行回滚
b线程这时持有的 20 就是脏读
两个线程执行流程:
a线程读取用户id=1备注数量为一条
b线程将用户id=1备注添加了一条
a线程再次读取用户id=1备注数量,这时变成两条了
幻读又叫做幻行
两个线程执行流程:
a线程读取id=1的字段1数据为10
b线程将id=1的字段1数据修改为20
a线程再次读取id=1 字段1 ,发现两次读取的不一致,这就是不可重复读
可读取到未提交的数据,会导致脏读、幻读、不可重复读
只读已提交的数据,会导致幻读、不可重复读
只读已提交的数据,但可读取多次,造成幻读
并发差,不会造成脏读、幻读、不可重复读
原文:https://www.cnblogs.com/rb2010/p/13396286.html