数据库实验五--OpenGauss(完整性控制)
实验要求
- 练习创建下面约束:
主键(PRIMARY KEY)约束;
唯一性(UNIQUE)约束;
将STUDENTS表中的SNAME列设为唯一键约束、COURSES表中的CNAME列设为唯一键约束;
检查(CHECK)约束等;
外键(FOREIGN KEY)约束:外键约束是为了强制实现表之间的参照完整性。级联参照完整性约束就是为了保证外键数据的关联性。 - 创建触发器
触发器是一种特殊类型的存储过程,通常用于实现强制业务规则和数据完整性。创建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();
我们测试一下:
本文来自作者:CK_0ff,转载请注明原文链接:https://www.cnblogs.com/Ck-0ff/p/16174236.html