MySQL事务

在MySQL中,所有的DML操作在执行之后都会有一个commit操作[隐式的]

commit的意思就是用来提交事务.

DTL,数据事务语言

事务的定义:

就是指一组相关的SQL操作,我们所有的操作都是处在事务中的

注意:

  1. 在数据库中**,执行业务的基本单位是事务,不是以某一条SQL**

  2. 数据库在默认情况下,事务都是打开的,也就是说它是一直

  3. 处在事务中的,一个事务的结束,代表着下一个事务的开启

  4. 执行commit或者rollback指令时,会结束当前事务

    [已经提交的事务将不能够被回滚]

作用:用来保证数据的平稳性和可预测性.

事务的四大特性(ACID):

  1. atomic,原子性,事务是不可再分割的,要么同时成功,要么同时失败

  2. consistency,一致性,事务一旦结束,内存中的数据和数据库中的数据是保持一致的.

  3. isolation,隔离性,事务之间互不干扰,一个事务的结束意味着下一个事务的开启

  4. duration,持久性,事务一旦提交,则数据持久化到数据库中,永久保存

    [涉及到数据库的备份和恢复的一些技术,冷备份,热备份…]

事务控制语句

  1. BEGIN或START TRANSACTION;显式地开启一个事务;

  2. **COMMIT;**也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改成为永久性的;

  3. **ROLLBACK;**有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

  4. SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;

  5. RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

  6. ROLLBACK TO identifier;把事务回滚到标记点;

  7. SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。

MYSQL 事务处理主要有两种方法

  1. 用 BEGIN, ROLLBACK, COMMIT来实现

    1-1. BEGIN 开始一个事务

    1-2. ROLLBACK 事务回滚

    1-3. COMMIT 事务确认

  2. 直接用 SET 来改变 MySQL 的自动提交模式:

    2-1. SET AUTOCOMMIT=0 禁止自动提交

    2-2. SET AUTOCOMMIT=1 开启自动提交

多事务的并发处理机制

原因:多个事务同时操作一个表中的同一行数据,如果这些操作是.修改操作的话,就会产生并发问题,如果不处理,则会造成数据不一致的情况.

数据库可能产生的并发问题包括:

  1. 脏读

是指一个事务正在访问数据,并且对这个数据进行修改,而这种修改

还没有提交到数据库中,而另一个事务也访问了这个数据,并且使用了这个数据.

解决方法:一个事务在修改数据时,该数据不能被其他事务访问

  1. 不可重复读

是指一个事务多次读取同一条记录,如果此时另一个事务也访问并且

修改了该数据,则就会出现多次读取出现数据不一致的情况,原来的

数据变成了不可重复读取的数据

解决方法:只有在修改事务完全提交过后才可以读取到数据

  1. 幻读

是指一个事务修改表中的多行记录,但是此时另一个事务对该表格进行

了插入数据的操作,则第一个事务会发现表格中会出现没有被修改的行,

就像发生了幻觉一样.

解决方法:在一个事务提交数据之前,其他事务不能添加数据

不可重复读的重点是修改,同样的条件,你读取过的数据,再次读取出来发现值不一样了幻读的重点在于新增或者删除

事务隔离级别

  1. READ_UNCOMMITTED

这是事务最低的隔离级别,它充许另外一个事务可以看到这个事务未提交的数据。
解决第一类丢失更新的问题,但是会出现脏读、不可重复读.

  1. READ_COMMITTED

保证一个事务修改的数据提交后才能被另外一个事务读取,即另外一个事务不能读取该事务未提交的数据。
解决第一类丢失更新和脏读的问题,但会出现不可重复读.

  1. REPEATABLE_READ

保证一个事务相同条件下前后两次获取的数据是一致的
解决第一类丢失更新,脏读、不可重复读.

  1. SERIALIZABLE

事务被处理为顺序执行。解决所有问题 - 有点类似于锁表.

性能及其低下.

提醒:
Mysql默认的事务隔离级别为repeatable_read

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值