四月二十四号日报
今日学习内容
PostgreSQL的高级特性
1.1视图:我们可以在该查询上创建一个视图,这会给该查询一个名字,我们可以像使用一个普通表一样来使用它。如下
create view myview as
select city,temp_lo,temo_hi,date,location
from weather,cities
where city=name
select *from myview;
1.2外键:简而言之就是起约束作用,①插入非空值时,如果主键中没有这个值,则不能插入②更新时,不能改变主键表中没有的值。举个栗子
create table cities(
city varchar(80) primary key,
location point
);
create table weather(
city varchar(80) references cities(city),
temp_lo int,
temp_hi int,
prcp real,
date date
);
insert into weather values ('Berkeley', 45, 53, 0.0, '1994-11-28');
这里会出现违反外键约束的报错,因为在cities表中不存在Berkeley的主键
1.3事务:事务是所有数据库系统的基础概念。事务最重要的一点是它将多个步骤捆绑成了一个单一
的、要么全完成要么全不完成的操作。步骤之间的中间状态对于其他并发事务是不可见的,并且如果有某些错误发生导致事务不能完成,则其中任何一个步骤都不会对数据库造成影响。
在PostgreSQL中,开启一个事务需要将SQL命令用begin
和commit
命令包围起来:
begin
--sq语句
commit;
如果在事务执行中我们并不想提交(比如转账时余额不足),我们可以发出rollback
命令而不是commit
命令,这样所有目前的更新将会被取消。
也可以利用保存点来以更细的粒度来控制一个事务中的语句。保存点允许我们有选择性地放
弃事务的一部分而提交剩下的部分。在使用SAVEPOINT定义一个保存点后,我们可以在必
要时利用ROLLBACK TO回滚到该保存点。该事务中位于保存点和回滚点之间的数据库修改
都会被放弃,但是早于该保存点的修改则会被保存。
比如我们从Alice的账户扣款100美元,然后存款到Bob的账户,结果直到最后才发现我们应该存到Wally的账户。我们可以通过使用保存点来做这件事:
begin;
--SQL语句
savepoint my_savepoint
--SQL语句
--发现转账错误,应该是转给Wally
rollback to my_savepoint
--SQL语句
commit;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!