事务特性、隔离级别及验证、多个事务运行存在的问题

 

一、什么是事务(transaction)

  1. 事务就是一堆的逻辑语句+逻辑判断
  2. 一个数据库事务由一条或者多条sql语句构成,它们形成一个逻辑的工作单元。这些sql语句要么全部执行成功,要么全部执行失败
  3. 事务是保证数据的完整性和一致性的重要手段
  4.  注意事项、@@autocommit作用

系统变量@@autocommit默认是打开的,这意味着任何1条DML语句是一个事务,会自动提交(Oracle数据库默认是关闭的,要自动提交)。

要将@@autocommit关闭,防止误操作造成数据的丢失损坏

实际使用中,应该使用SET语句来关闭自动提交,否则一个事务不可能由多条SQL语句构成

mysql> SHOW  VARIABLES  LIKE  '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SET @@autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW  VARIABLES  LIKE  '%autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.01 sec)

二、.为什么要使用事务

要将一部分的操作作为一个整体来执行,要么所有语句都成功,要么所有语句都失败

例如银行转账,应该是我主转账给你,然后你收到钱,这才是完整的步骤,如果我转账了,而你没有收到钱,那么所有的执行失败

三、.事务类型

  • DML事务:由一条或者多条DML语句构成

如果关闭autocommit参数,需要手工commit或者rollback

如果没有关闭autocommit参数,Mysql会自动执行commit操作

如果显式开启一个事务,就需要手工执行commit和rollback

  • DDL事务:总是由一条DDL语句构成(create、drop、alter语句)

执行完了DDL之后之后,Mysql自动执行一个commit操作

  • DCL事务:总是由一条DCL语句构成(创建一个用户类似的操作)数据控制事务

执行完了DCL操作时,Mysql自动执行一个commit

保存点是事务的一个事件


 

四、.commit/rollback

commit:将所有操作永久写入数据库当中

rollback:回滚之前的操作,不写入数据库

  • commit和rollback操作前的数据情况

1.所有数据都是在内存中操作,不写入磁盘(不持久化)

2.如果事务未提交或回滚,别的会话不可以看到事务修改的数据(不允许脏读)

3.本事务修改的数据行会被锁定,不允许其他事务进行操作

 

  • commit和rollback操作后的数据情况

1.所有数据都持久化到磁盘

2.所有的会话都可以看到修改后的数据

3.提交之后,锁定的行会释放,其他事物可以对这些行进行操作

 

五、.其它事务控制语句

SAVEPOINT identifier :建立一个保存点,用来在事务中做一个标记,专门提供给rollback to语句使用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值