数据库知识整理——零零碎碎

数据库引擎

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 ...

外键(foreign key tbl_name(id) references parent_tbl_name(id))

表的外键是别外一张表的主键,将两者联系在一起。作用:保证数据的完整性

确保数据完整性的约束还有,主键约束、唯一键约束、非空约束等

索引

索引确实方便数据的查询,但是开僻索引需要消耗存储资源和对索引维护需要开锁,所以大量引用索引会带来插入、删除操作的低效率。了解一下B+树索引(非常重要),B+树索引具有高扇出性,一般只有2、4层。

聚集索引和非聚集索引,其本质都是B+索引。

其区别如下表示:

聚集索引,其叶子节点存放行记录数据,即叶子节点也称为数据页,也就是说表中数据也是索引的一部分。其特点是一张表只能拥有一个聚集索引。在Innodb中,会以每张表的主键为准,生成聚集索引,如果表没有主键,会根据某列自动生成默认键,从而构建聚集索引。

非聚集索引,其叶子节点并不包含行数据,而是除key值元素外含一个书签(指针)指向相应的存储地址区。据了解,利用非聚集索引查找,最终还是要回归到聚集索引查找。非聚集索引可以创建多个,其创建命令:create index …

数据库中的锁

从程序员角度上看,

乐观锁:假定不会发生并发冲突,只在提交操作时检查是否违反数据完整性(利用版本号验证)。

悲观锁:假定会发生并发冲突,屏蔽一切可能违后数据完整性的操作。

从数据库解度上看,

共享锁:也为读锁,允许多个用户进行并发读取。

独占锁:也为写锁,只有当数据即没有读,也没有写时,才可进行写上锁。

更新锁:防止死锁产生,首先锁定数据,等需要更新时,再将更新锁改为写锁

有关锁问题

脏读:读取了别的还未提交事务时的数据,此是最需要避免的情况。

不可重复读:读取了前一次事务所提交的数据,对应着行锁定。

虚读(幻读):读取了前一次事务所提交的批量数据,对应着表锁定。

数据库知识整理——零零碎碎

相关推荐