MySQL中的事务






事务



事务 transaction : 一系列要发生的连续的操作,是针对数据的操作语言,而不是对表结构操作的



事务安全 : 一种保护连续操作同时满足(实现)的一种的机制



事务安全的意义 : 保证数据操作的完整性.



事务操作 存储引擎需要是innodb



事务操作分为两种 : 自动事务(默认的) , 手动操作.



手动事务:操作流程



1.开启事务:告诉系统一下的所有操作(写操作)不要直接写入到数据库中,先存放到事务日志中.

start transaction ;



mysql c api 事务 mysql事务流程_回滚






2. 进行事务操作,所有的操作都放在数据日志中,为提交之前基表数据没有被操作;



mysql c api 事务 mysql事务流程_数据库_02





3.对事务操作成功之后,选择性的将日志文件中操作的结果保存(同步)到数据表或者说直接清空事务日志(原来的操作全部清空)

A.提交事务 : 同步数据表 (操作成功) : commit

B.回滚事务 : 直接清空日志表 (操作失败) : rollback


mysql c api 事务 mysql事务流程_数据库_03




事务原理:


事务开启后,所有的操作都会保存到事务日志中,事务日志只有得到commit命令之后才会同步到数据表中,其他任何情况都会被清空(rollback,断电,断开连接)


mysql c api 事务 mysql事务流程_回滚_04




事务回滚点


回滚点 : 在某个成功操作完成之后,后续的操作有可能失败,但是不管成功还是失败,前面操作都已经成功,可以在成功的位置设置一个点,可以供后续的失败操作,返回到该位置,而不是返回所有操作,这个点称之为回滚点.

设置回滚点语法 : savepoint 回滚点名字;

回到回滚点语法:rollback to 回滚点名字;

基本语法:

Start transaction;

...需要处理的数据的Sql语句。

savepoint 回滚点名字;

rollback to 回滚点名字;

commit;


事务(自动事务处理)


在MySql中:默认的都是自动事务处理,用户操作会立即同步到数据表中。

自动事务是通过系统变量进行表现的 由 autocommit 变量控制;

查看系统标量 : show variables like 'autocommit';


mysql c api 事务 mysql事务流程_回滚_05




关闭自动提交


set autocommit = off/0;


自动关闭之后需要手动提交:commit/rollback;通常都会使用自动事务.


mysql c api 事务 mysql事务流程_数据库_06


 


事务特性


事务四大特性: ACID

A:atomic 原子性:事务的整个操作是一个整体,不可分割,要么全部成功要么全部失败.

C:consistency,一致性,事务操作前后,数据表中数据不会发生变化.

I:isolation, 隔离性,事务操作数据是把数据库中的数据拿到事务的临时日志中进行操作的,所以事务的操作是相互隔离不受影响的.

D:durability 持久性,数据一旦提交不可改变,用就的改变数据表数据.


锁机制


innodb默认是行锁,但是如果在事务操作过程中,没用使用到索引,那么系统会自动提交全表检索数据,自动升级为表锁.

行锁:只要当前行被锁住 别的 用户不能操作行.

表锁:整张表被锁住,别的用户不能操作表.

表锁之后的超时


mysql c api 事务 mysql事务流程_数据库_07


 




innodb行锁升级为表锁.


mysql c api 事务 mysql事务流程_数据_08