关于数据库:MySql基础笔记8-事务

2次阅读

共计 1458 个字符,预计需要花费 4 分钟才能阅读完成。

@TOC

注:实践知识点来源于 https://www.runoob.com/mysql/mysql-transaction.html,仅为集体学习应用。

1、作用

用于解决操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既须要删除人员的根本材料,也要删除和该人员相干的信息,如信箱,文章等等,这样,这些数据库操作语句就形成一个事务!

 在 MySQL 中只有应用了 Innodb 数据库引擎的数据库或表才反对事务。事务处理能够用来保护数据库的完整性,保障成批的 SQL 语句要么全副执行,要么全副不执行。事务用来治理 insert,update,delete 语句 

2、满足的条件

4 个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

 原子性:一个事务(transaction)中的所有操作,要么全副实现,要么全副不实现,不会完结在两头某个环节。事务在执行过程中产生谬误,会被回滚(Rollback)到事务开始前的状态,就像这个事务素来没有执行过一样。一致性:在事务开始之前和事务完结当前,数据库的完整性没有被毁坏。这示意写入的材料必须完全符合所有的预设规定,这蕴含材料的精确度、串联性以及后续数据库能够自发性地实现预约的工作。隔离性:数据库容许多个并发事务同时对其数据进行读写和批改的能力,隔离性能够避免多个事务并发执行时因为穿插执行而导致数据的不统一。事务隔离分为不同级别,包含读未提交(Read uncommitted)、读提交(read committed)、可反复读(repeatable read)和串行化(Serializable)。持久性:事务处理完结后,对数据的批改就是永恒的,即使系统故障也不会失落。

在 MySQL 命令行的默认设置下,事务都是主动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因而要显式地开启一个事务务须应用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止应用以后会话的主动提交。

3、事务管制语句

  • BEGIN 或 START TRANSACTION 显式地开启一个事务;
  • COMMIT 也能够应用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有批改成为永久性的;
  • ROLLBACK 也能够应用 ROLLBACK WORK,不过二者是等价的。回滚会完结用户的事务,并撤销正在进行的所有未提交的批改;
  • SAVEPOINT identifier,SAVEPOINT 容许在事务中创立一个保留点,一个事务中能够有多个 SAVEPOINT;
  • RELEASE SAVEPOINT identifier 删除一个事务的保留点,当没有指定的保留点时,执行该语句会抛出一个异样;
  • ROLLBACK TO identifier 把事务回滚到标记点;
  • SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

4、解决形式

1、用 BEGIN, ROLLBACK, COMMIT 来实现

  • BEGIN 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

2、间接用 SET 来扭转 MySQL 的主动提交模式:

  • SET AUTOCOMMIT=0 禁止主动提交
  • SET AUTOCOMMIT=1 开启主动提交

## 5、实际操作

正文完
 0