1: mysql 存储引擎 主要包括 innodb ,myisam ,memory 等等
innodb 与 myisam 优缺点对比:
innodb 支持事务处理(ACID), 支持行锁,更强大的索引
myisam 在数据量大,查询时效率高
1:存储结构
myisam 数据保存在三个文件中,第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI
innodb 数据都保存在一个文件中
2: 存储空间
MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
3、 事务支持
MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
4、 CURD操作
MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。(因为没有支持行级锁),在增删的时候需要锁定整个表格,效率会低一些。相关的是innodb支持行级锁,删除插入的时候只需要锁定改行就行,效率较高
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。
5、 外键(一个表的一列,作为另一表的主键)
MyISAM:不支持
InnoDB:支持
innodb 事务 有四种隔离级别:(聚簇索引 包括 主键b+tree 辅助键 b+tree)
脏读:当一个事务update 一行数据,没有commit ,另一个事务会读取到未提交的数
不可重复读:一个事务在执行过程中,查询了两次数据,另外一个事务更新了该条数据,导致这个事务两次读的数据不一致
幻读:一个事务在执行时,另一个事务向里面插入一条新的数据,会出现新数据没有执行事务操作。
1:不可提交读 会出现脏读 , 不可重复读 , 幻读
2:可提交读 会出现不可重复读,幻读
3:可重复读 会出现幻读
4:可串行读 都不会出现 , 但使用锁会较多,占用内存资源
锁类别:
1:共享锁 : 可读 不可更新
2:排它锁 :不可读,不可更新