1.数据库分类

主要分为关系型数据库和非关系型数据库。

1.1 关系型数据库

关系型数据库是依据关系模型来创建的数据库,所谓关系模型就是“一对一、一对多、多对多”等关系模型,关系模型就是指二维表格模型,因此一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。
常见的关系型数据库:Oracle、DB2、Microsoft SQL Server、MySQL等;

1.1.1 ACID理论

ACID,是指在数据库管理系统(DBMS)中事务所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
在数据库系统中,一个事务是指由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,为了保证事务的顺利执行,事务必须具备ACID特性。
原子性:原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做。即要么转账成功,要么转账失败,是不存在中间的状态。
如果无法保证原子性会怎么样?就会出现数据不一致的情形,A账户减去50元,而B账户增加50元操作失败。系统将无故丢失50元。

隔离性:隔离性是指多个事务并发执行的时候,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。如下图所示:
什么数据库,数据库的简介与分类-LMLPHP持久性:持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

一致性:一致性是指事务执行前后,数据处于一种合法的状态,这种状态是语义上的(即数据自己所编写的逻辑)。 也可以说是事务在完成时,必须使所有的数据都保持一致状态。
例一:A账户有200元,转账300元出去,此时A账户余额为-100元。你自然就发现了此时数据是不一致的,为什么呢?因为你定义了一个状态,余额这列必须大于0。

问题一:Mysql怎么保证一致性的?

  1. 从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性。也就是说ACID四大特性之中,C(一致性)是目的,A(原子性)、I(隔离性)、D(持久性)是手段,是为了保证一致性,数据库提供的手段。数据库必须要实现AID三大特性,才有可能实现一致性。例如,原子性无法保证,显然一致性也无法保证。

  2. 事务中不能存在违反约束的代码,一旦存在,一致性还是无法保证的。例如,你在转账的例子中,你的代码里故意不给B账户加钱,那一致性还是无法保证。因此,还必须从应用层角度考虑,通过代码判断数据库数据是否有效,然后决定回滚还是提交数据!

07-11 06:07