原本地址: https://amos-x.com/index.php/amos/archives/db-transaction/
前言
数据库的四大特性是什么,为神马要满足这些特性,事务是怎么被创造并用来满足这些特性,了解数据库本质的一些概念,有助于更好的理解数据库。
当然,这也是面试中常见的基础问题,下面就来想来详细分析一下
正文
一 事务的起源
对于大部分程序员来说,他们的任务就是把现实世界的业务场景映射到数据库世界。那么就会碰到一个问题,比如典型的银行存款问题,假设银行为了保存用户的信息,建立了一个account
表:
CREATE TABLE account (
id INT NOT NULL AUTO_INCREMENT COMMENT '自增id',
name VARCHAR(100) COMMENT '客户名称',
balance INT COMMENT '余额',
PRIMARY KEY (id)
) Engine=InnoDB CHARSET=utf8;
假设A和B他们都到银行开一个账户,他们在现实世界中拥有的资产就会体现在数据库世界的account
表中。比如现在A有11
元,B只2
元,那么现实中的这个情况映射到数据库的account
表就是这样:
+----+--------+---------+
| id | name | balance |
+----+--------+---------+
| 1 | A | 11 |
| 2 | B | 2 |
+----+--------+---------+
这里A与B在银行里的资产的值,就是此时此刻现实世界的一个状态,随着时间流逝,A与B在银行间进行存取转账等操作,他们的余额就会发生变动,每一个操作就想相当于一次状态转换。
那么对应数据库也就要进行进行变动来反映现实世界的映射,但是却不是那么容易,比如假设B急需用钱买彩票,找A借5元,然后A就去ATM,向B转账了5元,然后按下确定后,就走了。对于数据库的世界来说,就是在A的记录的余额上减去5元,B的余额加上5元,翻译成sql就是:
UPDATE accou