数据库

数据库事务

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。

Mysql的事务的实现原理

Mysql 隔离级别有以下四种(级别由低到高):

READ UNCOMMITED (未提交读) READ COMMITED (提交读) REPEATABLE READ (可重复读) SERIALIZABLE (串行化)

实现事务功能的三个技术如下:

  1. 日志文件(redo log 和 undo log)
  2. mysql锁技术
  3. 多版本并发控制MVCC(MultiVersion Concurrency Control)
    • 概念:InnoDB的 MVCC ,是通过在每行记录的后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存了行的过期时间,当然存储的并不是实际的时间值,而是系统版本号。主要实现思想是通过数据多版本来做到读写分离。从而实现不加锁读进而做到读写并行。

实现事务采取了哪些技术以及思想?

  • 原子性:使用 undo log ,从而达到回滚;
  • 持久性:使用 redo log,从而达到故障后恢复;
  • 隔离性:使用锁以及MVCC,运用的优化思想有读写分离,读读并行,读写并行;
  • 一致性:通过回滚,以及恢复,和在并发环境下的隔离做到一致性。

Redis的定时机制怎么实现的

Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件(服务器对套接字操作的抽象)和时间事件(服务器对定时操作的抽象)。Redis的定时机制就是借助时间事件实现的。 一个时间事件主要由以下三个属性组成:id:时间事件标识号;when:记录时间事件的到达时间;timeProc:时间事件处理器,当时间事件到达时,服务器就会调用相应的处理器来处理时间。一个时间事件根据时间事件处理器的返回值来判断是定时事件还是周期性事件

数据库设计之三范式

范式: 对设计数据库提出的一些规范,目前有迹可寻的共有8种范式,一般遵守3范式即可。

  • 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列。
  • 第二范式(2NF): 满足 1NF,另外包含两部分内容,一是表必须有一个主键;二是非主键字段必须完全依赖于主键,而不能只依赖于主键的一部分。
  • 第三范式(3NF): 满足 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
第一范式
contact	 	        name	id	    age
Jason、1001、25	 	Jason	1001	25

第二范式
OrderID OrderDate           CustomerID  CustomerName    CustomerAddr    CustomerCity	 	 
1001758	2020/10/20 12:30	13500	    Jason	        nanjing	        jiangsu

第三范式
Order表	 	                                    Customer表
OrderID	OrderDate	        CustomerID	    CustomerID	CustomerName	CustomerAddr	CustomerCity
1001758	2020/10/20 12:30	13500	 	    13500	    Jason	        nanjing	        jiangsu

1
2
3
4
5
6
7
8
9
10
11
12
13