1 了解事务
1.1 什么是事务
事务是一组逻辑处理单位,可以是执行一条SQL语句,也可以是执行几个SQL语句。
事务用来保证数据由一种存储情况变为另一种情况,组成事务的各个单元要么都执行成功,要么都执行失败。
1.2 为什么使用事务
如果只是简单的一条SQL语句的执行,那么是不需要事务的,但在一些复杂的情况下,一个操作会涉及到多条SQL语句的执行,这种情况下就有必要保证所有的操作全部成功或者全部失败。
比如,小明给小红转账的一个操作,就会涉及到从小明账户扣钱和给小红账户充钱的两个操作。只有两个操作都成功执行了整个操作才算成功,这时就可以提交整个事务,可以说状态由转账前变到了转账后。否则有任何一个操作执行失败的话整个操作都要算做失败,这时就需要恢复事务,保证两个账户上的金额和转账前是一样的,表示恢复到了转账前的状态。
所以事务是为了保证一组操作的完整性而出现的,也是为了保证数据操作的安全。
1.3 支持使用事务的引擎
使用“show engines;”命令查看数据库支持的存储引擎,以及存储引擎是否支持事务:
mysql> show engines;
+--------------------+---------+--------------+------+------------+
| Engine | Support | Transactions | XA | Savepoints |
+--------------------+---------+--------------+------+------------+
| FEDERATED | NO | NULL | NULL | NULL |
| MRG_MYISAM | YES | NO | NO | NO |
| MyISAM | YES | NO | NO | NO |
| BLACKHOLE | YES | NO | NO | NO |
| CSV | YES | NO | NO | NO |
| MEMORY | YES | NO | NO | NO |
| ARCHIVE | YES | NO | NO | NO |
| InnoDB | DEFAULT | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | NO | NO | NO |
+--------------------+---------+--------------+------+------------+
9 rows in set (0.00 sec)
mysql>
发现默认的是InnoDB引擎,并且