22、事务

1、案例引出事务: 

  张三转账给李四,必须保证张三账户减少8000,李四账户增加8000,这两项操作必须全部成功,

   如何保证?需要事务

 

事务可以保证多个操作原子性,要么全成功,要么全失败。对于数据库来说事务保证批量的DML要么全成功,要么全失败。事务具有四个特征ACID

 

a) 原子性(Atomicity

 

  整个事务中的所有操作,必须作为一个单元全部完成(或全部取消)。

 

b) 一致性(Consistency

 

  在事务开始之前与结束之后,数据库都保持一致状态。

 

c) 隔离性(Isolation)

 

  一个事务不会影响其他事务的运行。

d) 持久性(Durability)

  在事务完成以后,该事务对数据库所作的更改将持久地保存在数据库之中,并不会被回滚。

 

2、事务的相关概念:

事务中存在一些概念:

a) 事务(Transaction):一批操作(一组DML

b) 开启事务(Start Transaction

c) 回滚事务(rollback

d) 提交事务(commit

e) SET AUTOCOMMIT:禁用或启用事务的自动提交模式

 当执行DML语句是其实就是开启一个事务

关于事务的回滚需要注意:只能回滚insertdeleteupdate语句,不能回滚select(回滚select没有任何意义),对于createdropalter这些无法回滚.

事务只对DML有效果。

 

注意:rollback,或者commit后事务就结束了。

 

3、事务的提交与回滚演示

1) 创建表

create table user(

  id int (11) primary key not null auto_increment ,
       username varchar(30),

  password varchar(30)

)  ENGINE=InnoDB DEFAULT CHARSET=utf8

2) 查询表中数据

3) 开启事务START TRANSACTION;

4) 插入数据

insert into user (username,password) values ('zhangsan','123');

5) 查看数据

 6) 修改数据

7) 查看数据

8) 回滚事务

9) 查看数据   此时表中的数据在回滚以后就消失了,无论你进行列删除、更新、插入

 

4、自动提交模式

  • 自动提交模式用于决定新事务如何及何时启动。 
  • 启用自动提交模式:

– 如果自动提交模式被启用,则单条DML语句将缺省地开始一个新的事务。 

– 如果该语句执行成功,事务将自动提交,并永久地保存该语句的执行结果。 

– 如果语句执行失败,事务将自动回滚,并取消该语句的结果。 

– 在自动提交模式下,仍可使用START TRANSACTION语句来显式地启动事务。这时,一个事务仍可包含多条语句,直到这些语句被统一提交或回滚。 

  • 禁用自动提交模式: 

– 如果禁用自动提交,事务可以跨越多条语句。   

– 在这种情况下,事务可以用COMMIT和ROLLBACK语句来显式地提交或回滚。 

  • 自动提交模式可以通过服务器变量AUTOCOMMIT来控制。 
  • 例如:

mysql> SET AUTOCOMMIT = OFF; 

mysql> SET AUTOCOMMIT = ON; 

mysql> SET SESSION AUTOCOMMIT = OFF; 

mysql> SET SESSION AUTOCOMMIT = ON; 

show variables like '%auto%'; -- 查看变量状态

 

5、事务之间的隔离

 

 

 

 

 

posted @ 2019-11-15 20:31  笔心  阅读(117)  评论(0)    收藏  举报