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