数据库事务介绍及特性mysql
1、数据库事务介绍sql
简单地说,事务就是逻辑上的一组SQL语句操做,组成这组操做的各个SQL语句,执行时要么所有成功,要么所有失败。数据库
例如:oldboy给oldgirl转帐5元钱,流程以下:并发
1. 从oldboy银行卡取出5元,计算式money-5。oracle
2. 把5元钱打入oldgirl的帐户上,oldgirl帐户收到5元,计算式money+5。spa
上述转帐的过程,对应的sql语句为:事务
mysql> update oldboy_account set money=money-5 where name='oldboy';ci
mysql> update oldboy_account set money=money+5 where name='oldgirl';it
上述的两条SQl操做,在事务中的操做就是要么执行,要么都不执行。io
这就是事务的原子性(Atomicity)。
MySQL5.5支持事务的引擎:InnoDB/ndb(mysql集群默认引擎)。
2、事务的四大特性
一、原子性(Atomicity)
事务是一个不可分割的单位,事务中的全部SQL操做要么都发生,要么都不发生。
二、一致性(Consistency)
事务发生前和发生后,数据的完整性必须保持一致。
三、隔离性(Isolation)
当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其它的会话是不可见的,多个并发的事务之间的数据是不可见的。
四、持久性(Durability)
一个事务一旦被提交,它对数据库中的数据改变是永久性的。若是出了错误,事务也不容许撤销,只能经过”补偿性事务”。
小结:数据库的四大特性对于全部关系型数据库都是适用的。
3、事务的开启
数据库默认事务是自动提交的,也就是发一条sql它就执行一条。若是想多条sql放在一个事务中执行,则须要使用事务进行处理。当咱们开启一个事务,而且没有提交,mysql会自动回滚事务。或者咱们使用rollback命令手动执行回滚事务。
MysQL5.6版本 |
一、查看当前数据库自动提交的状态,默认为ON mysql> show variables like "%autocommit%" ; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ 1 row in set (0.00 sec) 小结:mysql默认是自动提交的,oracle须要手动提交。
二、设置自动提交的状态为OFF mysql> set global autocommit=off; Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%autocommit%" ; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+ 1 row in set (0.00 sec) 小结: 一、建立一个表,若是自动提交的状态为OFF,就须要commit手动提交。
三、回滚事务 mysql> rollback; Query OK, 0 rows affected (0.00 sec) |