postgresql事务

查看更多教程:http://www.gitbook.net/postgresql/2013080567.html

 

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’,’man',25);

 

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

 

查询:select*from student;

 

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

 

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

 

删除视图:drop view aa_view_test;

 

创建视图:create or replace view 

aa_view_test          ——>视图名

 (name  , age)          ——>视图里的字段

as 

select name ,age from student;

 

 

 

EXIST OR  NOT EXIST:是否存在

 

select name ,age from  student_a as A

where exist (select *from student_b. as B);

 

case用法:

 

case  type 

when ‘a’ then ‘一级’

when ‘b’ then ‘二级’

when ‘c’ then ‘三级’

else ‘其他’ end  as  类型

 

 

 

对集合的操作:

Union all  全部数据加起来「包含重复」

 

select *from student1

union all

select *from student2;

 

 

Intersect-----选取公共部分

select *from student1

Intersect

select *from student2;

 

 

except 记录减法

select *from student1

except

select *from student2;

 

转载于:https://www.cnblogs.com/1314520xh/p/10236675.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值