事务介绍:
简单的说,事务就是指逻辑上的一组SQL语句操作,组成这组操作的各个SQL语句,要么全成功要么全失败。
例如:A给B转账5元,流程是从A的账户扣除5元,把5元打入B的账户,B的账户上收到5元。
SQL语句为:update account set money=money-5 where name='A'; update account set money=money+5 where name='B';
上述的SQL语句操作,在事务中要么都执行,要么都不执行; 这是事务的原子性(Acomicity)
事务的四大特性(ACID)
1.原子性(Atomicity)
事务是一个不可分割的单位,事务中的所有SQL等操作要么都发生,要么都不发生。
2.一致性(Consistency)
事务发生前和发生后,数据的完整性必须保持一致。
3.隔离性(Isolation)
当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其他的回话是不可见的,多个并发事务之间的数据是相互隔离的。有个备份参数--single-transaction(innodb使用)
4.持久性(Durability)
一个事务一旦被提交,它对数据库中的数据改变时永久性的。如果出了错误,事务也不允许撤销,只能通过"补偿事务"。
开启事务:
数据库默认事务是自动提交的,发一条SQL执行一条。如果想多条SQL放在一个事务中执行,则需要使用事务进行处理。当开启一个事务,并且没有提交,mysql会自动回滚事务,或者使用rollback命令手动回滚事务。
start transaction 开启事务
rollback 回滚事务
commit 提交事务
mysql>set global autocommit=1; #开启自动提交
mysql>set global autocommit=0; #禁止自动提交 如果不执行commit,退出后,之前执行的操作就丢失了。