数据库操作事务小结

来源:互联网 发布:windows virtual pc 编辑:程序博客网 时间:2024/06/06 11:20

**Web开发中对数据的操作经常需要结合事物的知识,由于事务的知识点比较零散,在此做一个总结,方便以后查找。
1.什么是事务
答:事物是指逻辑上的一组操作(insert,update,delete),组成这组操作的各个单元,要么全部成功要么全部失败。
2.mysql中的事物管理
a)start transaction —- 开启一个事务。以后的sql都在一个事务中。更改的内容不会自动提交。
rollback —事务的回滚—同时失败的情况。–事务结束,并且全部失败,数据回复到开始之前的状态
commit —–事务的提交—-同时成功—事务结束。全部成功。
3.jdbc中事务的管理
这里写图片描述
一旦数据commit之后,永久更改了。不能回滚了。
4. 事务的特性 ACID
事务:一组操作。

原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位(最小的一个整体),事务中的操作要么都发生,要么都不发生。

一组操作时一个整体。不能分割。

一致性(Consistency)
事务前后数据的完整性必须保持一致。
一致性和原子性相关。只有都成功或者,都失败(原子性) ,就可以保证事务的一致性。

事务的前后的内容一直。
转账: a 1000 b 1000 a给b转100;
转账之前 a和b的总额 2000
转账之后 也要2000;

部门,员工。 每个部门里面都有人。
解散一个部门
删除人。
删出部门

如果都成功。每个部门都有人。
如果都失败。每个部门都有人

隔离性(Isolation)
事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

多个事务是独立存在的。多个事物不能够相互干扰。

a –b—事务A

c-d—事务B

如果A失败了。不能够影响B

持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
a-100
b+100
提交
此时a永远少100
b永远的多了100

a – 100 a 900
b+100 b 1100
commit;

a -100 a 800
b+100 b 1200
rollback : a 900 b 1100

rollback—异常。对上述没有任何影响了。

5.事务的隔离级别
a)脏读:是指一个事物读取了另外一个事物未提交的数据,后果比较严!!
b)不可重复读:在同一个事务中读出来的结果,数据上面有出入
c)虚度(幻读):在同一个事物中取出来的数据条数有出入

6.数据库的隔离级别
Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)
Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)不可以避免虚读
Read committed:可避免脏读情况发生(读已提交,避免不了虚读以及不可重复读)
Read uncommitted:最低级别,以上情况均无法保证。(读未提交)

设置事务的隔离级别
set session transaction isolation level 设置事务隔离级别
select @@tx_isolation 查询当前事务隔离级别

7.隔离级别的性能问题
性能比较
Serializable 性能最差:事务一个一个执行的。排队。

Serializable < Repeatable read < Read committed < Read uncommitted

安全性比较
Serializable 安全性最好:所有问题避免掉。

Serializable > Repeatable read > Read committed > Read uncommitted

Read uncommitted 避免不了最重问题,脏读。
Serializable:性能太差。

mysql (默认)– Repeatable read;
oracle(默认) – Read committed;

0 0
原创粉丝点击