您的位置:首页 > 博客中心 > 数据库 >

Odoo 后端数据库postgreSQL事务级别

时间:2022-03-15 10:48

Table of Contents

事务的特性

并行事务的问题

事务隔离级别

Odoo事务隔离级别

odoo事务控制

   

   

事务的特性

事务4个特性,简写未ACID

  • 原子性(Atomicity):

事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。

   

  • 一致性(Consistemcy):

事务前后,数据库的状态都满足所有的完整性约束。

   

  • 隔离性(Isolation):

并发执行的事务是隔离的,一个不影响一个。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。通过设置数据库的隔离级别,可以达到不同的隔离效果。

   

  • 持久性(Durability):

在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

   

并行事务的问题

并行事务可能造成以下问题

Dirty Read【脏读】:

脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。

   

例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Rollback了,那么事务T2读取的数据就是脏的。

   

Nonrepeatable Read【不可重复读】:

不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。

   

例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。

   

Phantom Read【幻读】:

事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据

   

例如:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。这就叫幻读。

   

备注:

不可重复读,在 update 语句时 可能发生

幻读,在 insert , delete 语句时 可能发生

   

事务隔离级别

标准SQL支持 4种 事务隔离级别

Transaction Isolation Levels

   

odoo事务控制

尽管Odoo Model方法是内建事务的,但是在需要的时候,可以使用 savepoint 进行现场保护,然后,对事务进行控制, 回滚,或者 释放

   

在需要 记录还原点的时候 使用 cursor.savepoint() , 例如

技术分享图片

   

本类排行

今日推荐

热门手游