数据库实验五--OpenGauss(完整性控制)

实验要求

  1. 练习创建下面约束:
      主键(PRIMARY KEY)约束;
      唯一性(UNIQUE)约束;
      将STUDENTS表中的SNAME列设为唯一键约束、COURSES表中的CNAME列设为唯一键约束;
      检查(CHECK)约束等;
    外键(FOREIGN KEY)约束:外键约束是为了强制实现表之间的参照完整性。级联参照完整性约束就是为了保证外键数据的关联性。
  2. 创建触发器
     触发器是一种特殊类型的存储过程,通常用于实现强制业务规则和数据完整性。创建UPDATE触发器检查修改操作的业务规则,如:在STUDENTS表上建立触发器,当用户修改学生的学号时给出提示信息。

实验内容一:创建约束

CREATE TABLE <表名>
(<列名><数据类型> DEFAULT <缺省值>] [列级约束定义],
<列名><数据类型> DEFAULT <缺省值>] [列级约束定义],
...,
[<表级约束定义>, ,<表级约束定义>]);

我们在使用create创建表的时候(如上),就可以为该表添加列级约束和表级约束。

在这里插入图片描述
当然,我们也可以在创建表之后通过ALTER来更改约束性
举例:

ALTER TABLE departments
ADD FOREIGN KEY (Dheadno) REFERENCES Teachers(Tno);

在这里插入图片描述

在这里插入图片描述
唯一键约束:

ALTER TABLE students 
ADD UNIQUE(sname);

在这里插入图片描述
在这里插入图片描述

ALTER TABLE courses
ADD UNIQUE(cname);

在这里插入图片描述

实验内容二:触发器

CREATE TRIGGER <触发器名> <触发时间> <触发事件> ON <表名> 
[REFERENCING <旧/新值别名>, …, <旧/新值别名>] 
[FOR EACH {ROW | STATEMENT}]
[WHEN (<触发条件>)]
 <被触发的SQL语句>

<被触发的SQL语句>是触发动作体,具有如下形式:

BEGIN ATOMIC
<可执行的SQL语句>;
...
END

在STUDENTS表上建立触发器,当用户修改学生的学号时给出提示信息:

先创建函数

CREATE OR REPLACE FUNCTION updatestudents() RETURNS TRIGGER AS
$$ 
DECLARE
BEGIN
RAISE NOTICE 'sno is changed';
RETURN NEW;
END;
$$ LANGUAGE PLPGSQL;

再创建触发器

CREATE TRIGGER updatesno
AFTER UPDATE OF sno ON students
FOR EACH ROW
EXECUTE PROCEDURE updatestudents();

在这里插入图片描述我们测试一下:

在这里插入图片描述

posted @ 2022-04-21 15:11  CK_0ff  阅读(593)  评论(0编辑  收藏  举报