开发者学堂课程【MySQL 实操课程:事务的 ACID 特性】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/717/detail/12813
事务的 ACID 特性
目录:
一、MySQL 事务管理主要内容
二、事务的 ACID 特性
三、MySQL 对事务的支持
一、MySQL 事务管理主要内容
MySQL 事务管理主要分成以下四部分:
1、事务的 ACID 特性
什么是事务、事务的特性、ACID 特性的特点等内容。
2、MySQL 下事务的开启、提交、回滚语句应用
MySQL 下默认处理事务的策略;MySQL 默认处理事务是采用自动提交的方式;调整策略;事务开启后做提交和回滚等手动处理。
3、MySQL 事务下 truncate 和delete 的差异
前面课程中学习过 truncate 和 delete 删除数据的两种方式,并且做对比。那么,在 MySQL 事务下 truncate 和 delete 的操作有什么差异。
4、MySQL 下事务的四种隔离级别
每一种隔离级别的定义和力度;对于数据操作时的表现形式等。
二、事务的 ACID 特性
1、什么是事务
事务是对数据库连续的操作。一般这种操作涉及到对数据更新处理。这些更新操作是不可分割的逻辑单元。如果事务被成功的执行,那事务中所有的更新操作都会被成功的执行,并将执行的结果提交到数据库文件中,成为数据库永久的组成部分。如果该事物执行失败,那这个事务所有的操作都会被撤销,也就是所有的工作都失效。简单理解,事务中的所有操作要么全部执行,要么全部都不执行。
2、事务的 ACID 特性包括以下几点:
(1)原子性 (Atomicity)
事务中包含的所有操作要么都做 ,要么都不做,保证数据库是一致的
类似于银行系统的转账业务。如张三转给李四100元,张三扣减100,李四增加100。这个操作过程需要确保张三扣减100和李四增加100的操作同时执行。不能出现张三扣了100,而李四没有加收100的情况。转账的操作就是事务的原子性操作。
(2)一致性 (Consistency)
数据库中的数据在事务操作前和事务处理后必须满足业务规则约束
比如,转账操作。一致性确保事务操作前后的状态一致。张三扣减100和李四增加100最终的总金额是一致的。
(3)隔离性 (Isolation)
允许多个并发事务同时对数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
如:在数据库里不只有一个数据库在连接对数据库进行操作。同时可能会有多个操作。这多个操作就是多个并发的事务,并发事务之间不影响彼此独立的对数据进行读写修改,互不影响。
(4)持久性 (Durability)
事务处理结束后 ,对数据的修改是永久的,即便系统发生故障也不会丢失。
事务一旦提交后,这个事务过程中的所有操作就会被持久化。持久化就是成功的写入到数据库的文件系统里面。MySQL 本身就是最终持久化到磁盘里。持久化到磁盘后,不管是遇到 MySQL 重启、盗机或者其他问题,只要磁盘上的数据没有被损坏,MySQL 重新启动后数据依然存在。
三、MySQL 对事务的支持
1、MySQL 支持对 MyISAM 和 MEMORY 存储引擎的表进行表级锁定,对 BDB 存储引擎的表进行页级锁定,对 InnoDB 存储引擎的表进行行级锁定。
(1) MyISAM 主要是锁表,一旦开启一个事务,MyISAM 下是对整个表锁定,后续其他的 MySQL 客户端连接想操作这张表的数据,就必需等待解锁后。
(2) InnoDB 主要是行级锁定。在其他客户端只要操作的不是锁定的同一行数据,其他均可正常操作。
2、默认情况下,表锁和行锁都是自动获得的,不需要额外的命令。但是在有些情况下,用户需要明确地进行锁表或者进行事务控制,以确保整个事务的完整性,这样就需要事务控制和锁定语句来完成。
比如,默认 InnoDB 进行行级锁定,只能满足默认行锁定。某些情况希望进行锁表操作,这就需要用户显示的操作。