案例:银行的数据库里面存储着用户的账户信息表,当用户 A 想用户 B 转账的时候,正常情况下,A 账户的余额减少,B 账户的余额增加;但是由于某种原因(例如突然断电),当 A 账户的余额减少之后,B 账户的余额并没有增加,这就造成了数据库数据的安全隐患。
解决方案:当 A 账户的余额减少之后,不要立即修改数据表,而是在确认 B 账户的余额增加之后,同时修改数据表。
事务
通过前面的案例及解决方案,我们就引出了一个全新的概念,那就是:事务,即
- 一系列将要发生或正在发生的连续操作。
而事务安全,是一种保护连续操作同时实现(完成)的机制。事务安全的意义就是,保证数据操作的完整性。
首先,执行如下 SQL 语句,创建银行账户表并插入数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1-- 创建银行账户表
2create table bank_account(
3 id int primary key auto_increment,
4 cardno varchar(16) not null unique comment 'bank card number',
5 name varchar(20) not null,
6 money decimal(10,2) default 0.0 comment 'account balance'
7)charset utf8;
8
9-- 插入数据
10insert into bank_account values
11(null, '0000000000000001', 'Charies', 8000),
12(null, '0000000000000002', 'Gavin', 6000);
13
14