postgress 高级特性

1、视图

CREATE VIEW view_name AS
      SELECT x,x,xx,xxx,xxxx,xxxx
      FROM xx,xxx
      WHERE x = x;
      
SELECT * FROM view_name;

2、外键:维持数据的引用完整性

在数据库系统中,可以通过先检查A表中是否有匹配的记录存在,然后决定应该接受还是拒绝即将插入B表的行。

CREATE TABLE aaa (
     cs    varchar(80)  primary key,
     location  point
);
CREATE TABLE bbb(
     cs varchar(80)  references aaa(cs),
     temp_lo  int,
     temp_li  int,
     prcp     real,
     date     date
);
mydb=# INSERT INTO bbb VALUES ('jn',26,36,0.0,'2023-07-03');
ERROR:  insert or update on table "bbb" violates foreign key constraint "bbb_cs_fkey"
DETAIL:  Key (cs)=(jn) is not present in table "aaa".

3、事务

一个事务被称为是原子的:从其他事务的角度来看,它要么整个发生要么完全不发生。
步骤之间的中间状态对于其他并发事务是不可见的,并且如果有某些错误发生导致事务不能完成,则其中任何一个步骤都不会对数据库造成影响。
一个事务型数据库保证一个事务在被报告为完成之前它所做的所有更新都被记录在持久存储(即磁盘)。

在PostgreSQL中,开启一个事务需要将SQL命令用BEGIN和COMMIT命令包围起来。

BEGIN;
  UPDATE cities SET name = 'aaaa'
     WHERE name = 'San Francisco';
COMMIT;
回滚 ROLLBACK

如果,在事务执行中我们并不想提交(或许是我们注意到Alice的余额不足),我们可以发出ROLLBACK命令而不是COMMIT命令,这样所有目前的更新将会被取消。

ROLLBACK;

PostgreSQL实际上将每一个SQL语句都作为一个事务来执行。如果我们没有发出BEGIN命令,则每个独立的语句都会被加上一个隐式的BEGIN以及(如果成功)COMMIT来包围它。一组被BEGIN和COMMIT包围的语句也被称为一个事务块。

3.1、保存点 SAVEPOINT

也可以利用保存点来以更细的粒度来控制一个事务中的语句。
保存点允许我们有选择性地放弃事务的一部分而提交剩下的部分。
在使用SAVEPOINT定义一个保存点后,我们可以在必要时利用ROLLBACK TO回滚到该保存点。
该事务中位于保存点和回滚点之间的数据库修改都会被放弃,但是早于该保存点的修改则会被保存。
可以多次回滚到它。
不管是释放保存点还是回滚到保存点都会释放定义在该保存点之后的所有其他保存点。

BEGIN;
  UPDATE cities SET name = 'San Francisco'
     WHERE name = 'aaaa';
  SAVEPOINT my_saveaaa;
  UPDATE cities SET name = 'bbb'
     WHERE name = 'aaaa';
   ROLLBACK TO my_saveaaa;
    COMMIT;

ROLLBACK TO是唯一的途径来重新控制一个由于错误被系统置为中断状态的事务块,而不是完全回滚它并重新启动。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值