【数据库原理实验(openGauss)】完整性控制
完整性控制
文章目录
- 完整性控制
- 一、约束
- 1.创建约束的方法
- (1)创建基本表时定义表的完整性约束条件
- (2)修改表时定义表的完整性约束条件
- 2.创建约束实例
- 二、触发器
- (1)创建触发器语法
- (2)创建触发器实例
一、约束
1.创建约束的方法
(1)创建基本表时定义表的完整性约束条件
SQL语言使用 CREATE TABLE
语句创建基本表,其基本格式如下:
CREATE TABLE <表名>
(<列名><数据类型> DEFAULT <缺省值>] [列级约束定义],
<列名><数据类型> DEFAULT <缺省值>] [列级约束定义],
...,
[<表级约束定义>, ,<表级约束定义>]);
列约束定义
列级约束定义形式如下:
[CONSTRAINT <约束名>]<列约束>
常用的列约束包括以下几种:
NOT NULL
: 不允许该列取空值;不加NOT NULL
限制时,该列可以取空值。PRIMARY KEY
: 指明该列是主码,其值非空、唯一。UNIQUE
: 该列上的值必须唯一。这相当于说明该列为候选码。CHECK (<条件>)
:指明该列的值必须满足的条件,其中<条件>
是一个涉及该列的布尔表达式。
表约束定义
一个表可以包含零个或多个<表约束定义>,用于定义主码、其他候选码、外码和表上的其他约束。
表约束定义形式如下:[CONSTRAINT <约束名>] <表约束>
PRIMARY KEY
(A1, …, Ak):说明属性列A1, …, Ak构成该关系的主码。UNIQUE
(A1, …, Ak):说明属性列A1, …, Ak上的值必须惟一,这相当于说明A1, …, Ak构成该关系的候选码。CHECK
(<条件>):说明该表上的一个完整性约束条件。FOREIGN KEY
(A1, …, Ak) REFERENCES <外表名> (<外表主码>) [<参照触发动作>]它说明属性A1, …, Ak是关系(表) 的外码,<外表名>给出被参照关系的表名,<外表主码>给出被参照系的主码 ,而<参照触发动作>说明违反参照完整性时需要采取的措施。
创建选课信息表并定义约束:
CREATE TABLE SC
(Sno CHAR (20) , Cno CHAR (20), Grade SMALLINT CHECK (Grade>=0 AND Grade<=100) , PRIMARY KEY (Sno , Cno) , FOREIGN KEY (Sno) REFERENCES Students (Sno) , FOREIGN KEY (Cno) REFERENCES Courses (Cno)
) ;
(2)修改表时定义表的完整性约束条件
SQL 使用 ALTER TABLE
语句修改基本表,其基本格式如下:
ALTER TABLE <表名>
[ADD [COLUMN] <列名><数据类型>[列级约束定义]]
[ALTER [COLUMN] <列名> {SET DEFAULT <缺省值> |
DROP DEFAULT}]
[DROP [ COLUMN ] <列名> {CASCADE | RESTRICT}]
[ADD <表约束定义>]
[DROP CONSTRAINT <约束名>{CASCADE | RESTRICT}]
2.创建约束实例
将STUDENTS表中的SNAME列设为唯一键约束:
ALTER TABLE Students ADD UNIQUE(Sname);
COURSES表中的CNAME列设为唯一键约束:
ALTER TABLE Courses ADD UNIQUE(Cname);
二、触发器
(1)创建触发器语法
创建触发器语句的一般格式如下:
CREATE TRIGGER <触发器名> <触发时间> <触发事件> ON <表名>
[REFERENCING <旧/新值别名>, …, <旧/新值别名>]
[FOR EACH {ROW | STATEMENT}]
[WHEN (<触发条件>)]<被触发的SQL语句>
<触发时间>可以是
BEFORE
:事件前,AFTER
:事件后<触发事件>可以是T上的
INSERT
、DELETE
、UPDATE
或UPDATE OF
<触发列>, …, <触发列>REFERENCING
子句创建一些过渡变量用来存放表T和表T的行更新前的旧值和更新后的新值。<旧/新值别名>可以是如下形式之一:OLD/NEW [ROW] [AS] <变量>
:创建行过渡变量<变量>存放表T的行更新前/后的值OLD/NEW TABLE [AS] <变量>
:创建表过渡变量<变量>存放表T更新前/后的值
FOR EACH ROW
定义行级触发器,而FOR EACH STATEMENT定义语
句级触发器缺省时为语句级触发器WHEN
子句说明触发条件,缺省时无条件触发。<触发条件>是一个任意
布尔表达式。<被触发的SQL语句>是触发动作体,具有如下形式:
BEGIN ATOMIC <可执行的SQL语句>; ... END
(2)创建触发器实例
在STUDENTS表上建立触发器,当用户修改学生的学号时给出提示信息:
创建函数
CREATE OR REPLACE FUNCTION UpdateStudents() RETURNS TRIGGER AS $$ DECLARE BEGIN RAISE NOTICE 'Trigger is working'; RETURN NEW; END; $$ LANGUAGE PLPGSQL;
创建触发器
CREATE TRIGGER UpdateSno AFTER UPDATE OF Sno ON Students FOR EACH ROW EXECUTE PROCEDURE UpdateStudents();
测试:
UPDATE Students SET Sno ='201905001' WHERE Sno='201706003';
【数据库原理实验(openGauss)】完整性控制相关推荐
- 【数据库原理实验(openGauss)】实验报告
<数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...
- 【数据库原理实验(openGauss)】金融场景化实验
金融场景化实验 文章目录 金融场景化实验 一.金融数据模型 1.E-R图 2.关系模式 3.物理模型 Client(客户)表 bank_card(银行卡)表 finances_product(理财产品 ...
- 【数据库原理实验(openGauss)】交互式SQL语句
交互式SQL语句 文章目录 交互式SQL语句 一.数据准备 (1)向Departments中写入数据 (2)向Teachers中写入数据 (3)向Students中写入数据 (4)向Courses中写 ...
- 【数据库原理实验(openGauss)】 使用JDBC连接数据库
使用JDBC连接数据库 文章目录 使用JDBC连接数据库 一.准备连接环境 1.修改数据库的pg_hba.conf文件 2.登陆数据库授权退出 3.修改数据库监听地址 4.下载Java驱动包导入工具 ...
- 【数据库原理实验(openGauss)】数据库的备份与恢复
数据库的备份与恢复 文章目录 数据库的备份与恢复 一.物理备份和恢复 实验准备: (1)物理备份 (2)物理备份恢复 二.逻辑备份和恢复 实验准备: (1)gs_dump备份 1.gs_dump备份示 ...
- 【数据库原理实验(openGauss)】事务与并发控制
事务与并发控制 文章目录 事务与并发控制 一.事务 (1)事务的ACID特性 (2)事务管理 (3)事务实例 1.未提交的事务 2.已提交的事务 二.并发控制 (1)加锁语法 (2)加锁实例 一.事务 ...
- 【数据库原理实验(openGauss)】视图
视图 文章目录 视图 一.创建视图 二.基于视图的查询 三.基于视图的更新 四.删除视图 五.对视图的理解 一.创建视图 CREATE VIEW CS_Students AS SELECT Sno, ...
- 【数据库原理实验(openGauss)】认识DBMS系统
认识DBMS系统(openGauss) 文章目录 认识DBMS系统(openGauss) 一.openGauss安装目录 (1)集群openGauss安装目录 (2)集群openGauss数据目录 ( ...
- 【数据库原理实验(openGauss)】 安全性控制
安全性控制 文章目录 安全性控制 一.用户及角色 (1)用户 (2)角色 二.权限设置及回收 1.将系统权限授权给用户或者角色 2.将数据库对象授权给角色或用户 3.将用户或者角色的权限授权给其他用户 ...
最新文章
- TVM编译机器学习到 WASM 和 WebGPU
- 阿里离职员工吐槽加班太疯狂,所有的高薪都是加班加出来的!被榨干到一丝精力都不剩!婚姻不保!...
- [Java] SpringMVC工作原理之四:MultipartResolver
- python学习环境安装_python学习系列----环境的安装
- 短融网杨夏耘:数据如何驱动金融科技业务升级?
- 动态控制jQuery easyui datagrid工具栏显示隐藏
- 我为什么用docker-compose来打包开发环境
- 工信部证书含金量_关于推荐考取BIM工程师、装配式工程师证书
- 转载:SharePoint技术资料
- android获取组件id,Android 获取控件id的三种方式
- VBS/BAT使用/恶搞(操作+图示)
- 泛微协同办公系统移动服务器,泛微协同办公平台Ecology系统重装迁移指导手册.pdf...
- Java根据出生日期计算(判断)星座
- word文档如何画线条流程图_word怎么画图,如何用word制作流程图
- [Python趣味应用]总有人想偷看你电脑?留下证据后办他~~
- 如何计算机械能增加量,探讨优化验证机械能守恒定律实验中动能增加量的计算方法...
- 一分钟了解什么是代理ip和api接口
- 免费小说阅读器(Android版本)全站开源
- 7-1 复数类的操作
- 解决百度网盘下载慢的方案
热门文章
- SpringBoot之第一个Restfu示例
- ef core mysql 生成迁移失败_EF Core 数据库迁移(Migration)
- layui select change事件_一道2020年全国生物学联赛试题背后的“眼齿鸟事件”
- Regional Proposal的输出到底是什么
- ERROR: Could not install Gradle distribution from ‘https://services.gradle.org/distributions/gradle
- spring无法连接mysql_初学Spring——连接MySQL数据库的问题和解决
- 年月日_时间单位年月日是怎么得来的?
- 谷歌为什登不上去github_同声传译被攻陷!谷歌发布Translatotron直接语音翻译系统...
- idea重写接口没有@override_【自学C#】|| 笔记 19 接口
- 常用idea快捷键大全