hyfound 2018-09-12
i、Innodb(MySQL的默认引擎):支持事务、行级锁、外键、支持一致性非锁定读(不太理解)
ii、MyISAM
iii、performance_schema
A原子性:要么全执行、要么全都不执行
C一致性:不改数据库中数据一致性,例如:a+b=10,a变,则b也变,而且结果仍然是10。
I隔离性:事务与事务之间的执行相互独立,互不影响。
D持久性:事务执行成功后,其更新便是永久性的,不会无缘无故的回滚。
Serializable(串行化,最高等级):避免脏读、不可重复读和幻读;
Repeatable read(可重复读):避免脏读、不可重复读;
Read commited(读提交):避免脏读;
Read uncommited(读未提交):最低隔离级别。
DDL(data definition language):create、alter、drop、truncate
DML(data manipulation Language):select、update、insert、delete
由一表或多表的子列所成的虚拟表,没有实际的物理存储。可通过修改视图中数据从而修改基表中相应数据。创建视图命令为create view ...
表的外键是别外一张表的主键,将两者联系在一起。作用:保证数据的完整性
确保数据完整性的约束还有,主键约束、唯一键约束、非空约束等
索引确实方便数据的查询,但是开僻索引需要消耗存储资源和对索引维护需要开锁,所以大量引用索引会带来插入、删除操作的低效率。了解一下B+树索引(非常重要),B+树索引具有高扇出性,一般只有2、4层。
聚集索引和非聚集索引,其本质都是B+索引。
其区别如下表示:
聚集索引,其叶子节点存放行记录数据,即叶子节点也称为数据页,也就是说表中数据也是索引的一部分。其特点是一张表只能拥有一个聚集索引。在Innodb中,会以每张表的主键为准,生成聚集索引,如果表没有主键,会根据某列自动生成默认键,从而构建聚集索引。
非聚集索引,其叶子节点并不包含行数据,而是除key值元素外含一个书签(指针)指向相应的存储地址区。据了解,利用非聚集索引查找,最终还是要回归到聚集索引查找。非聚集索引可以创建多个,其创建命令:create index …
从程序员角度上看,
乐观锁:假定不会发生并发冲突,只在提交操作时检查是否违反数据完整性(利用版本号验证)。
悲观锁:假定会发生并发冲突,屏蔽一切可能违后数据完整性的操作。
从数据库解度上看,
共享锁:也为读锁,允许多个用户进行并发读取。
独占锁:也为写锁,只有当数据即没有读,也没有写时,才可进行写上锁。
更新锁:防止死锁产生,首先锁定数据,等需要更新时,再将更新锁改为写锁
脏读:读取了别的还未提交事务时的数据,此是最需要避免的情况。
不可重复读:读取了前一次事务所提交的数据,对应着行锁定。
虚读(幻读):读取了前一次事务所提交的批量数据,对应着表锁定。