数据库知识

90 阅读2分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

数据库知识

事务的特性

  • 原子性

    事务开始后的所有操作,要么全部成功,要么全部不做。执行过程中出错,事务回滚到执行前的状态

  • 一致性

    事务开始前和结束后,数据库的完整性约束没有被破坏

  • 隔离性

    事务A和事务B同时执行彼此之间没有干扰

  • 持久性

    事务完成后,事务对数据库的所有更新操作会存储到数据库,不能回滚

事务并发引发的问题

  • 脏读

    事务A读取事务B更新的数据,然后B回滚,事务A读到的数据为脏数据,与表中的最终实际数据不一致

  • 不可重复读

    事务A多次读取同一数据,事务B在事务A读取过程对数据做了更新并提交,导致事务A多次读取同一数据却结果不一样。读取结果和上次不一样

  • 幻读

    一个事务读到另一个事务新增加并提交的数据

  • 总结:不可重复读发生在数据修改时,幻读主要发生在新增和删除操作时

事务的隔离级别

事务隔离级别脏读不可重复读幻读
读未提交(read-uncommitted)
读已提交(read-committed)
可重复读(repeatable-read)
串行化(serializable)
  • 读未提交

    read-uncommitted,一个事务可以读取另一个未提交事务的数据

  • 读已提交

    read committed,一个事务要等另一个事务提交后才能读取数据

  • 可重复读

    repeatable read,在开始读取数据(事务开启)时,不再允许修改操作

  • 串行化

    serializable,将每个事务按一定的顺序去执行,它将隔离问题全部解决,但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

MYSQL三大范式

  • 第一范式(1NF)

    数据表的每一列都要保持它的原子特性,也就是列不能再被分割。

  • 第二范式(2NF)

    在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。

  • 第三范式(3NF)

    在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。消除传递函数依赖。