最近考核的时候发现把数据库事务知识点给忘记了,特地复习了一下,并写了一些相关笔记,来加深自己的记忆。
一、什么是事务?
事务(Transaction)就是一组SQL语句,这组SQL语句是一个逻辑工作单元。可以认为事务就是一组不可分割的SQL语句,其结果就是一个整体,永久性地修改数据库的内容,或者作为一个整体取消对数据库的修改。 换句话说,事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。比如:转账。
二、数据库事务模型
1、显式事务 显式事务又称自定义事务,是指用显式的方式定义其开始和结束的事务,当使用start transaction和 commit语句时则表示发生显式事务。 2、隐式事务 隐式事务是指每一条数据操作语句都自动地成为一个事务,事务的开始是隐式的,事务的结束有明确的标记。即当用户进行数据操作时,系统自动开启一个事务,事务的结束则需手动调用 commit或 rollback语句来结束当前事务,在当前事务结束后又自动开启一个新事务。 3、自动事务 自动事务是指能够自动开启事务并且能够自动结束事务。在事务执行过程中,如果没有出现异常,事务则自动提交;当执行过程产生错误时,则事务自动回滚。
三、事务的ACD(acid)属性(特性)
1、原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事中的操作要么都发生,要么都不发生。 2、一致性(Consistency) 事务必使数据库从一个一致性状态变换到另外一个一致性状态。 3、隔离性(Isolation) 事务的隔离性是指一个事的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。(事务隔离性就是为了多个事务同时执行而存在的) 4、持久性 (Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是水久性的,接下来的其他操作和数据库故障不应该对其有任何影响。
四、数据库常见并发异常
1、丢失修改 一个事务覆盖了其他事务对数据的已提交修改导致这些修改好像丢失了一样。 2、脏读 一个事务读取了其他事务还未提交的数据。 3、不可重复读 一个事务对同一数据的读取结果前后不一致。 4、幻读(虚读) 一个事务读取某个范围的数据时,因为其他事务的操作导致前后两次读取的结果不一致。幻读和不可重复读的区别在于,不可重复读是针对确定的某一行数据而言,而幻读是针对不确定的多行数据。
五、以事务的方式对数据库进行访问的优点:
1、把逻辑相关的操作分成了一个组。 2、在数据永久改变前,可以预览数据变化。 3、能够保证数据的读一致性。
|