html5 国外网站,国外网站推广,化妆品网站建设目的,wordpress 防下载事务的4大特性#xff08;ACID#xff09;#xff1a; 原子性(Atomicity)#xff1a; 事务是数据库的逻辑工作单位#xff0c;它对数据库的修改要么全部执行#xff0c;要么全部不执行。 一致性(Consistemcy)#xff1a; 事务前后#xff0c;数据库的状态都满足所有的完…事务的4大特性ACID 原子性(Atomicity) 事务是数据库的逻辑工作单位它对数据库的修改要么全部执行要么全部不执行。 一致性(Consistemcy) 事务前后数据库的状态都满足所有的完整性约束。 隔离性(Isolation) 并发执行的事务是隔离的一个不影响一个。如果有两个事务运行在相同的时间内执行相同的功能事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化为了防止事务操作间的混淆必须串行化或序列化请求使得在同一时间仅有一个请求用于同一数据。通过设置数据库的隔离级别可以达到不同的隔离效果。 持久性(Durability) 在事务完成以后该事务所对数据库所作的更改便持久的保存在数据库之中并不会被回滚。 并发事务引起的问题
更新丢失 两个事务都同时更新一行数据但是第二个事务却中途失败退出导致对数据的两个修改都失效了。这是因为系统没有执行任何的锁操作因此并发事务并没有被隔离开来。 脏读 脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。 例如事务T1修改了一行数据但是还没有提交这时候事务T2读取了被事务T1修改后的数据之后事务T1因为某种原因Rollback了那么事务T2读取的数据就是脏的。 不可重复读 不可重复读是指在同一个事务内两个相同的查询返回了不同的结果。 例如事务T1读取某一数据事务T2读取并修改了该数据T1为了对读取值进行检验而再次读取该数据便得到了不同的结果。 幻读 事务在操作过程中进行两次查询第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据 例如系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级但是系统管理员B就在这个时候插入了一条具体分数的记录当系统管理员A改结束后发现还有一条记录没有改过来就好像发生了幻觉一样。这就叫幻读。 事务的隔离级别
以上的4种问题更新丢失、脏读、不可重复读、幻读都和事务的隔离级别有关。通过设置事务的隔离级别可以避免上述问题的发生。 未授权读取级别 也称为读未提交Read Uncommitted。 以操作同一行数据为前提读事务允许其他读事务和写事务未提交的写事务禁止其他写事务但允许其他读事务。 此隔离级别可以防止更新丢失但不能防止脏读、不可重复读、幻读。 此隔离级别可以通过“排他写锁”实现。 授权读取级别 也称为读提交Read Committed。 以操作同一行数据为前提读事务允许其他读事务和写事务未提交的写事务禁止其他读事务和写事务。 此隔离级别可以防止更新丢失、脏读但不能防止不可重复读、幻读。 此隔离级别可以通过“瞬间共享读锁”和“排他写锁”实现。 可重复读取级别 可重复读取Repeatable Read。 以操作同一行数据为前提读事务禁止其他写事务但允许其他读事务未提交的写事务禁止其他读事务和写事务。 此隔离级别可以防止更新丢失、脏读、不可重复读但不能防止幻读。 此隔离级别可以通过“共享读锁”和“排他写锁”实现。 序列化级别 序列化Serializable。 提供严格的事务隔离。它要求事务序列化执行事务只能一个接着一个地执行不能并发执行。 此隔离级别可以防止更新丢失、脏读、不可重复读、幻读。 如果仅仅通过“行级锁”是无法实现事务序列化的必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。 隔离级别越高越能保证数据的完整性和一致性但是对并发性能的影响也越大。对于多数应用程序可以优先考虑把数据库系统的隔离级别设为Read Committed。它能够避免更新丢失、脏读而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题在可能出现这类问题的个别场合可以由应用程序采用悲观锁或乐观锁来控制。