摘要: 本文主要学习了 MySQL 数据库的事务操作.
概念
什么是事务
事务是一组逻辑处理单位, 可以是执行一条 SQL 语句, 也可以是执行几个 SQL 语句.
事务用来保证数据由一种存储情况变为另一种情况, 组成事务的各个单元要么都执行成功, 要么都执行失败.
为什么使用事务
如果只是简单的一条 SQL 语句的执行, 那么是不需要事务的, 但在一些复杂的情况下, 一个操作会涉及到多条 SQL 语句的执行, 这种情况下就有必要保证所有的操作全部成功或者全部失败.
比如, 小明给小红转账的一个操作, 就会涉及到从小明账户扣钱和给小红账户充钱的两个操作. 只有两个操作都成功执行了整个操作才算成功, 这时就可以提交整个事务, 可以说状态由转账前变到了转账后. 否则有任何一个操作执行失败的话整个操作都要算做失败, 这时就需要恢复事务, 保证两个账户上的金额和转账前是一样的, 表示恢复到了转账前的状态.
所以事务是为了保证一组操作的完整性而出现的, 也是为了保证数据操作的安全.
基本术语
保存点 (save point): 指在事务执行前, 或者事务执行后, 数据在数据库里的一个存储情况, 有时也会被称为状态.
回退 (rollback): 指撤销事务的操作, 事务执行期间执行的操作都将失效, 事务会恢复到上一个状态.
提交 (commit): 值提交事务的操作, 事务期间执行的操作全部生效, 事务进入一个新的状态.
支持使用事务的引擎
使用 show engines; 命令查看数据库支持的存储引擎, 以及存储引擎是否支持事务:
- MySQL> show engines;
- +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
- | Engine | Support | Comment | Transactions | XA | Savepoints |
- +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
- | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
- | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
- | MyISAM | YES | MyISAM storage engine | NO | NO | NO |
- | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
- | CSV | YES | CSV storage engine | NO | NO | NO |
- | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
- | ARCHIVE | YES | Archive storage engine | NO | NO | NO |
- | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
- | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
- +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
- 9 rows in set (0.00 sec)
- MySQL>
发现默认的是 InnoDB 引擎, 并且也支持事务.
未完待续.
来源: http://www.bubuko.com/infodetail-3297546.html