1.数据库引擎
1).MyISAM 、 InnoDB 、 MEMPRY 、 ARCHIVE 、 BLACKHOLE 、 CSV
A).MyISAM:提供高速存储和检索,以及全文搜索能力
a).表级锁
b).不支持事物
c).每个表生成三个文件(.frm表结构 / .MYD数据 / .MYI索引)
d).查询快
B).InnoDB:具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎
a).表级锁、行级锁
b).支持事物与外键
c).每个表生成两个文件(.frm表结构 / .idb索引和数据)
d).操作快(增删改)
2.数据库索引
1).索引定义
A).索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构
B).索引是表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单
C).索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
2).索引类型
A).普通索引 normal
B).唯一索引 unique
C).主键索引(一种特殊的唯一索引,一个表只能有一个主键,不允许有空值)
D).组合索引(最左原则)
E).全文索引fulltext
3).聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针
A).Innodb引擎主索引文件和数据文件为同一份文件(主键的索引结构中,既存储了主键值,又存储了行数据,这种结构称为"聚簇索引")
B).MYISAM引擎的索引文件(.MYI)和数据文件(.MYD)是相互独立的(非聚簇索引)
3.数据库锁
1).MySQL各存储引擎使用了三种类型(级别)的锁定机制:
A).表级锁(开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低)
B).页级锁(开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般)
C).行级锁(开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高)
2).MySQL的表级锁(MyISAM,MEMORY,CSV)
A).表共享读锁(Table Read Lock)
B).表独占写锁(Table Write Lock)
**读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求**
**写操作,则会阻塞其他用户对同一表的读和写操作**
3).MySQL的行级锁(InnoDb,NDBCluster)(InnoDb select根据需要添加锁)
A).共享锁(行级) in share mode
B).排他锁(行级) for update
C).意向共享锁(表级)
D).意向排他锁(表级)
4.数据库事务
1).ACID
A).原子性(Atomicity)
B).一致性(Consistency)
C).隔离性(Isolation)
D).持久性(Durability)
2).隔离等级
A).序列化(serializable) 可避免脏读、不可重复读、幻读的发生
B).可重复读(repeatable read) 可避免脏读、不可重复读的发生。(mysql默认)
C).读已提交(read committed) 可避免脏读的发生(oracle默认)
D).读未提交(read uncommitted)
3).脏读、不可重复读、幻读
A).脏读(一个事务处理过程里读取了另一个未提交的事务中的数据)
update account set money=money+100 where name=’B’; (此时A通知B)
update account set money=money - 100 where name=’A’;
B).不可重复读(在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了)
C).幻读(事务非独立执行时发生的一种现象)