加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql事务

发布时间:2020-12-13 16:10:16 所属栏目:百科 来源:网络整理
导读:pgsql 事务与并发控制 事务与并发控制 数据库几大特性: ACID : Atomicity:原子性:一个事务要么全部执行,要么全部不执行 Consistency :一致性:执行事务的时候,数据库从一个一致的状态变更到另一个状态 ?Isolation:隔离性: 确保在并发执行的时候,每

pgsql事务与并发控制

事务与并发控制

数据库几大特性:

ACID

Atomicity:原子性:一个事务要么全部执行,要么全部不执行

Consistency :一致性:执行事务的时候,数据库从一个一致的状态变更到另一个状态

?Isolation:隔离性: 确保在并发执行的时候,每个事务感觉不到其他事务在并发的执行

?Durability:持久性:一个事务完成之后,即使数据库发生故障,他对数据库的改变应该永久的保存在数据库中。

?

并发引起的现象

  • 脏读:一个事务读取了第二个事务的已经修改但是未提交的数据
  • 不可重复读:一个事务第一次读取数据之后,被读取的数据被另一个已提交的事务进行了修改,事务再次读取这些数据时候发现数据已经被另外一个事务所修改,两次查询不一致
  • 幻读:一个事务的两次结果集记录数不一致(特殊的不可重复读)
  1. 查看数据库的隔离级别操作
  • 查看全局事务级别
    select name,setting from pg_settings where name = ‘default_transaction_isolation‘
  • 修改全局事务隔离级别
    alter system set default_transaction_islation to ‘REPEATABLE READ‘;select pg_reload_conf();select current_setting(‘transaction_isolation‘);
  • 查看当前会话的事务隔离级别
    show transaction_isolcation;
  • 设置当前事务的事务隔离级别
    start transaction isolation level READ UNCOMMITED;
  • start TRANSACTION? ? select xxxx
  • END

?

?

事物是如何开始的?

1、每条SQL语句就是一个事物。「自动提交模式」

2、直到用户执行commit或rollback为止作一个事务。

?

2.1、事务开始 sql server 、Postgresql 是下面方式:

?

Begin transaction ; ? ? ?

? ? ? Update student set name=‘teddy’ where id=3 ;

?

?? ? Update student set age=‘13’ where id=3 ;

Commit ;———>提交处理

?

?

2.2、事务开始 mysql 是下面方式:start? transaction ;? ? ?

start transaction ; ? ? ?

? ? ? Update student set name=‘teddy’ where id=3 ;

?

?? ? Update student set age=‘13’ where id=3 ;

Commit ;———>提交处理

?

?

事务回滚例子:

begin transaction ;

? ? ? Update student set name=‘teddy’ where id=3 ;

?

?? ? Update student set age=‘13’ where id=3 ;

rollback ;———>取消处理

?

?

?

创建表:create table student ( student_id integer ,name varchar(12),sex varchar(12),age integer);

?

插入数据:insert into student values(1,‘teddy‘,‘man‘,25),(2,’Tony’,’man‘,27)(3,’lida’,25);

?

更新数据:Update student set name=‘teddy’ where id=3 ;

?

查询:select*from student;

?

删除数据: delete from student where student_id=1;? —————>? 只删除数据,表还存在。

?

删除表:drop table student;——————————————>表和数据都删除了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读