事务
事务是什么?
事务是一种机制,一个操作序列,包含了一组数据库操作命令,并且把所有命令作为一个整体一起向系统提交或者撤销操作请求,即统一这组命令要么一起执行,要么一起不执行
简短概况就是:事务即是一组命令序列,他们要么一起执行;要么一起不执行;从而保证了数据的完整性和统一性。
事务的特性
acid特性:原子性,一致性,隔离性,持久性
原子性atomicity
事务是一个不可分割的整体,事务中的所有操作要么一起执行,要么一起不执行。而事务中只要有一个操作不成功,那么整个事务都将会被回滚。 案例:a向b转账1000元,当只执行了扣款语句时断电了,a账号发生了扣款,b账号却没有收到打款。此时事务的原子性就会来保证事务要么都执行,要么都不执行了。
一致性cinsustency
事务开始前和事务执行结束后,数据库的完整性约束没有被破坏。
即事务开始前,数据库的数据处于一致状态;事务完成时,数据也必须处于一致状态。当事务运行时,数据可能会处于不一致的状态,但当事务完成时,数据必须回到一致状态。
案例:
对银行转账事务,不管事务成功与否,都应该再事务结束后保持前后二者存款总额与事务执行前一致
当多个用户对同一个表进行操作时,可能会出现以下一致性问题:
1脏读
a修改了这条数据但未提交后,此时b却可以看到a这条未提交的修改记录。--脏读
2不可重复读
a在一个事务c内,反复读取同一个数据时。在这个事务还没有结束时,b在另一个事务d中也访问了这个数据。那么,再第一个事务c中读到数次的数据,可能由于第二个事务d的修改,导致第一个事务c读到的数据前后不一致。--不可重复读
3幻读
一个事务对表中的所有数据进行了修改;同时,另一个事务向这个表添加了数据,操作第一个事务的用户会发现:表中还有一行数据没有被修改,像中了幻觉一样。--幻读
4丢失更新
两个事务同时读取同一条记录,a先修改记录,b也修改记录;当b提交后,那么a修改的结果会被b修改的结果覆盖。--丢失更新
隔离性
隔离性确保并发执行事务的状态保存与顺序执行事务时的状态相同
持久性
事务完成后,该事务对数据库所做的更改会持久的保存在数据库中,并且不会被回滚;
即不够系统是否发生故障,事务处理的结果都是永久的。一旦事务被提交,那么事务的效果将会永久的保存在数据库中。
总结
事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果。