mysql 事务
事务就是一个序列的操作,要么整个序列都执行完,要么都不执行。例如银行的转账从checking表转200到saving表,第一步:检查支票表checking金额,第二步:从支票表checking减去转账金额,第三步:储蓄表saving金额增加相应金额,以上散步打包在一个事务中,任何一个步骤失败,都会回滚所有步骤。
事务四大特性(ACID):
- 原子性 atomicity
- 一致性 consistence
- 隔离性 isolation
- 持久性 durability
一个很好的事务系统必须具有这四个特性
原子性:
一个事务视为不可分割的最小单元,对一个事务来说,不可能只执行其中的一部分操作,要么全执行,要么全回滚,这就是原子性。
一致性:
数据库总是从一个一致性的状态转换到另一个一致性的状态。在前面的例子中,一致性确保了,即使在执行第三、四条语句时系统崩溃,,支票账户也不会损失200,因为事务最终没有提交,所以事务所做的修改也不会保存到数据库中。确保不会出现数据丢失的情况。
隔离性:
通常来说,一个事务所做的修改在commit之前,对其它事务是不可见的,上面的例子中,执行到第三句从checking表中扣掉200,在没有执行commit之前,另外一个程序看到的checking表中的数据并没有扣掉200。同时,在没有commit之前,别的客户端也修改同一数据时,需要等待它commit之后才可以修改,不然就等待,等待时间久了就会报超时错误。简单说,一个sql的运行,不会影响另一个。
持久性:
一旦事务提交,所做的修改就会永久保存,此时即使系统崩溃,修改的数据也不会丢失
用 satrt transaction 语句开始一个事务,然后要么使用commit提交,将修改的数据持久保存,要么使用rollback撤销所有的修改,事务sql样本如下:
1、start transaction #也可以使用begin
2、select balance from checking where customer_id=10233276;
3、update checking set balance=balance -200 where customer_id=1023376;
4、update saving set balance=balance + 200 where customer_id=1023376;
5、commit
python默认已经开启了事务,所以修改语句执行完后,需要commit提交。

浙公网安备 33010602011771号