天天看点

comp3311-数据库week5辅导

文章目录

  • ​​Dynamically Generated Queries​​
  • ​​Aggregates​​
  • ​​constraints and assertions​​
  • ​​Triggers​​

Dynamically Generated Queries

也就是说可以用一个关键字​

​execute​

​可以把一个字符串里的内容当作指令执行!可以动态执行某个内容。

create or replace function
   set(_table text, _attr text, _val text) returns void
as $$
declare
   query text;
begin
   query := 'update ' || quote_ident(_table);
   query := query || ' SET ' || quote_ident(_attr);
   query := query || ' = ' || quote_literal(_val);
   execute query;
end; $$ language plpgsql;      

Aggregates

类似case when then end这样对某行做筛选然后做聚合操作,其实有替代方法,那就是设计自己的聚合函数,根据某种条件再做聚合。

constraints and assertions

assertions 是schema-level级别的约束,主要描述多个表之间的约束关系。

CREATE ASSERTION name CHECK (condition)

每次相关表更新,都会去检查是否满足这个assertion。

create assertion ClassSizeConstraint check (
   not exists (
      select c.id
      from   Courses c
             join Enrolments e on (c.id = e.course)
      group  by c.id
      having count(e.student) > 9999
   )
);
      

Triggers

触发器是为了加速对多个表之间关系的检查而取代assertion的。

Triggers provide event-condition-action (ECA) programming: