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

本文档详述了如何在数据库中创建和应用各种约束,包括主键、唯一性、检查约束以及外键约束。此外,还介绍了如何利用触发器来确保数据完整性,特别是创建了一个在更新STUDENTS表中学生学号时触发的通知机制。实验内容涵盖了数据库设计和管理的关键方面。
摘要由CSDN通过智能技术生成

实验要求

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

实验内容一:创建约束

先连接并进入数据库

su - omm
gs_om -t start
gsql -d postgres -p 26000 -r
\c db_cc

常见约束的定义:

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

我们在使用create创建表的时候(如上),就可以为该表添加列级约束和表级约束。
主键(PRIMARY KEY)约束和检查(CHECK)约束在下图展示:

在这里插入图片描述
当然,我们也可以在创建表之后通过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();

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

在这里插入图片描述

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiaki_0ff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值