实验作业(事务)
开启事务:start transaction;
提交事务:commit;
回滚事务:rollback;
以实验作业进行讲解:
进入mysql服务器中,首先执行“drop database if exists three”语句,以此确保打开的mysql中没有数据库three。
1.创建名为three的数据库。
例题:使用数据库three并按以下要求创建数据表account。
字段id:设置数据类型int(11)、主键约束(primary key)、字段值自动增加(auto_increment);
字段name:设置数据类型varchar(40);
字段money:设置数据类型float;
操作如下:
代码为:create table account(id int(11) primary key auto_increment,name varchar(40),money float);
向account数据表添加如下数据:
2.事务管理
事务的概念:现实生活中,人们经常会进行转账操作,转账可以分为两部分来完成,转入和转出,只有这两个部分都完成才认为转账成功,在数据库中,这个过程是使用两条语句来完成的,如果其中任意一条语句出现异常没有执行,则会导致两个账户的金额不同步,造成错误。
为了防止上述情况的发生,mysql中引入了“事务”,所谓事务就是针对数据库的一组操作,它可以有一条或多条sql语句组成,同一个事务的操作具备同步的特点,如果其中有一条语句无法执行,那么所有的语句都不会执行,也就是说,事务中的语句要么都执行,要么都不执行。
回滚事务说明:如果不想提交当前事务,通过rollback命令,取消事务,需要注意的是rollback语句命令只能针对未提交的事务执行回滚操作,已提交的事务是不能回滚的。
例题: a账户向b账户转账200元(创建事务),查询b账户余额信息记录。
代码为:start transaction;
update account set money=money+200 where name='b';
update account set money=money-200 where name='a';
commit;
- 练习题: 新增账户c,并在c账户中存入2000元,c账户向b账户转账1000元(创建事务)。
代码为:insert into account(id,name,money) values(3,'c',2000);
start transaction;
update account set money=money+1000 where name='b';
update account set money=money-1000 where name='c';
commit;
- 练习题:查询账户余额最少和最多的账户信息(提示:使用聚合函数)。
最少代码为:select id,name,min(money) from account;
最多代码为:select id,name,max(money) from account;
- 练习题:最多余额的账户向最少余额的账户转账100元(创建事务)。
代码为:start transaction;
update account set money=money+100 where name='a';
update account set money=money-100 where name='b';
commit;
例题:陈宁(a账户)在某购物网站上订购了10个杯子(每个5元),合计50。之后通过转账的方式向商家(b账户)支付货款,但是在支付的时候多输入了一个零,幸好及时发现后马上撤销,避免了经济损失(创建事务演示撤销转账过程)。
撤销代码为:start transaction;
update account set money=money+500 where name='b';
rollback;
- 简答题(简述事务的四个特性)
(1)原子性:
(2)一致性:
(3)隔离性:
(4)持久性:
11、简答题(简述事务的隔离级别)
(1)read uncommitted(读未提交):
(2)read committed(读提交):
(3)repeatable read(可重复读):
(4)serializable(可串行化):
事务的其他知识点:
设置事务隔离级别语法格式:
Set session transaction isolation level 隔离级别;
查询事务隔离级别语法格式:
Select @@tx_isolation;_