1.1事务的四大特性
使用事务可以保证业务的正确性,如果一个业务逻辑需要多个sql共同协作才可以完成,但其中一个出错了,这个时候我们希望整个操作全部退出,而事务就可以完成这个功能。
事务的四大特性(ACID):
原子性(Atomicity):一个事务的全部操作在数据库中不可分割,要么全部完成执行,要么全部不执行。
一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果一致。
隔离性(lsolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
持久性(Durability):对于任意已提交的事务,系统必须保证该事务对数据库的改变不被丢失。
注意:使用事务的前提条件,表的类型必须是innodb或bdb类型。
1.2表的类型和事务语句
1)查看表的创建语句
如下可以看到mysql数据库默认引擎是innodb:
show create table infor;
2)修改表的类型
alter table “表名” engine=innodb;
3)事务语句
开启begin;
提交commit;
回滚rollback;
1.3举例
1)创建表
(1)创建表bank
create table bank(
id int primary key not null,
name varchar(10),
balance int
);
(2)插入数据
insert into bank values(6221001,”小青”,1000);
insert into bank values(6221002,”小明”,2000);
insert into bank values(6221003,”李秋水”,3000);
insert into bank values(6221004,”李沧海”,4000);
2)使用事务
(1)打开两个cmd窗口,连接数据库
小青要给小明转账100元,转账完成后小青的余额是900元,小明的余额是2100元。
a. begin
在窗口1:
begin;
update bank set balance=900 where id=6221001;
update bank set balance=2100 where id=6221002;
可以看到
在窗口2,可以看到没有任何改变,说明窗口1的修改并没有写入磁盘,只是内存上的修改而已,所以只有窗口1显示了修改。
b. commit
回到窗口1:
提交修改
commit;
回到窗口2:
可以看到已经修改成功了,这个时候已经写入磁盘了。
c. 回滚
现在李秋水给李沧海转账1000元,转账后李秋水余额是2000元,李沧海是5000元。
在窗口1:
begin;
update bank set balance=2000 where id=6221003;
update bank set balance=5000 where id=6221004;
由a中可知,在窗口2是没有变化的,继续在窗口1:
rollback;
可以看到又回滚回去了: