关于mysql的三范式,ACID,索引的实现

460 阅读2分钟

1.数据库的三范式是什么

  • 第⼀范式:强调的是列的原⼦性,即数据库表的每⼀列都是不可分割的原⼦数据项。
  • 第⼆范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字⼀部 分的属性。
  • 第三范式:任何⾮主属性不依赖于其它⾮主属性

2.说⼀下 ACID 是什么

  • Atomicity(原⼦性):⼀个事务(transaction)中的所有操作,或者全部完成,或者全部不完 成,不会结束在中间某个环节。事务在执⾏过程中发⽣错误,会被恢复(Rollback)到事务开始前的 状态,就像这个事务从来没有执⾏过⼀样。即,事务不可分割、不可约简。
  • Consistency(⼀致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表⽰写 ⼊的资料必须完全符合所有的预设约束、触发器、级联回滚等。
  • Isolation(隔离性):数据库允许多个并发事务同时对其数据进⾏读写和修改的能⼒,隔离性可以 防⽌多个事务并发执⾏时由于交叉执⾏⽽导致数据的不⼀致。事务隔离分为不同级别,包括读未提交 (Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串⾏化 (Serializable)。
  • Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

3.mysql 索引是怎么实现的

索引是满⾜某种特定查找算法的数据结构,⽽这些数据结构会以某种⽅式指向数据,从⽽实现⾼效 查找数据。
具体来说 MySQL 中的索引,不同的数据引擎实现有所不同,但⽬前主流的数据库引擎的索引都是 B+ 树实现的,B+ 树的搜索效率,可以到达⼆分法的性能,找到数据区域之后就找到了完整的数据结构 了,所有索引的性能也是更好的。