SQL 数据库完整性

作者 : Dolphin

原文地址:http://blog.csdn.net/qingdujun/article/details/27109035

一、实体完整性定义

[例1]将Student表中的Sno属性定义为码。

CREATE TABLE Student
(
   Sno CHAR(10) PRIMARY KEY,  /*在列定义主码*/
   Sname CHAR(20) NOT NULL,
   Sage SMALLINT
);

或者:

CREATE TABLE Student
(
   Sno CHAR(10),
   Sname CHAR(20) NOT NULL,
   Sage SMALLINT,
   PRIMARY KEY(Sno)  /*在表级定义主码*/
);

[例2]将SC表中的Sno,Cno属性组定义为码。

CREATE TABLE SC
(
   Sno CHAR(10) NOT NULL,
   Cno CHAR(4) NOT NULL,
   Grade SMALLINT,
   PRIMARY KEY(Sno,Cno)  /*只能在表级定义主码*/
);

二、参照完整性

[例3]定义SC中的参照完整性

CREATE TABLE SC
(
   Sno CHAR(10) NOT NULL,
   Cno CHAR(4) NOT NULL,
   Grade SMALLINT,
   PRIMARY KEY(Sno,Cno),  /*只能在表级定义主码*/
   FOREIGN KEY(Sno) REFERENCES Student(Sno),  /*在表级定义参照完整性*/
   FOREIGN KEY(Cno) REFERENCES Course(Cno)    /*在表级定义参照完整性*/
);

[例4]显示说明参照完整性的违约处理示例。

CREATE TABLE SC
(
   Sno CHAR(10) NOT NULL,
   Cno CHAR(4) NOT NULL,
   Grade SMALLINT,
   PRIMARY KEY(Sno,Cno),  /*只能在表级定义主码*/
   FOREIGN KEY(Sno) REFERENCES Student(Sno)  /*在表级定义参照完整性*/
     ON DELETE CASECADE   /*当删除时,级联*/
     ON UPDATE CASECADE,  /*当更新时,级联*/
   FOREIGN KEY(Cno) REFERENCES Course(Cno)   /*在表级定义参照完整性*/
     ON DELETE NO ACTION  /*当删除时,拒绝*/
     ON UPDATE CASECADE   /*当更新时,级联*/
);

三、用户定义完整性

[例5]在定义SC表时,说明Sno,Cno,Grade属性不允许取空值。

CREATE TABLE SC
(
   Sno CHAR(10) NOT NULL,
   Cno CHAR(4) NOT NULL,
   Grade SMALLINT NOT NULL,
   PRIMARY KEY(Sno,Cno)  /*只能在表级定义主码*/
   /*如果定义了试题完整性,即主键,则隐含Sno,Cno不能取空*/
);

[例6]建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码。

CREATE TABLE DEPT
(
   Deptno NUMERIC(2),
   Dname  CHAR(9) UNIQUE,   /*要求Dname列值唯一*/
   Location CHAR(10),
   PRIMARY KEY(Deptno)      /*在表级定义主码*/
);

[例7]Student表的Ssex只允许取"男"或"女"。

CREATE TABLE Student
(
   Sno CHAR(10) PRIMARY KEY,  /*在列定义主码*/
   Sname CHAR(20) NOT NULL,
   Ssex  CHAR(2) CHECK (Ssex IN ('男','女')),  /*性别属性Ssex只允许取'男'或'女'*/
   Sage SMALLINT
);

[例7]SC表的Grade的值应该在0和100之间。

CREATE TABLE SC
(
   Sno CHAR(10) NOT NULL,
   Cno CHAR(4) NOT NULL,
   Grade SMALLINT CHECK(Grade >= 0 AND Grade <= 100),
   PRIMARY KEY(Sno,Cno)  /*只能在表级定义主码*/
   /*如果定义了试题完整性,即主键,则隐含Sno,Cno不能取空*/
   FOREIGN KEY(Sno) REFERENCES Student(Sno),
   FOREIGN KEY(Cno) ENFERENCES Course(Cno)
);

[例9]当学生性别是男时,其名字不能以Ms.打头。

CREATE TABLE Student
(
   Sno CHAR(10) PRIMARY KEY,  /*在列定义主码*/
   Sname CHAR(20) NOT NULL,
   Sage SMALLINT,
   Ssex CHAR(2),
   CHECK(Ssex='女' OR Sname NOT LIKE 'Ms.%')
   /*定义了元组中Sname和Ssex两个属性值之间的约束条件*/
);

四、完整性约束命名子句

[例10]建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是"男"或"女"。

CREATE TABLE Student
(
   Sno NUMERIC(6)
      CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999),
   Sname CHAR(20)
      CONSTRAINT C2 NOT NULL,
   Sage NUMERIC(3)
      CONSTRAINT C3 CHECK(Sage < 30),
   Ssex CHAR(2)
      CONSTRAINT C4 CHECK(Ssex IN('男','女')),
   CONSTRINT StudentKey PRIMARY KEY(Sno)
);

[例12]去掉[例10]中Student表中对性别的限制。

ALTER TABLE Student
  DROP CONSTRAINT C4;

[例13]修改表Student中的约束条件,要求学号改为在1000~9999之间。

ALTER TABLE Student
  DROP CONSTRAINT C1;
ALTER TABLE Student
  ADD CONSTRAINT C1 CHECK(Sno BETWEEN 1000 AND 9999);

参考文献:王珊,萨师煊.数据库系统概论(第4版) [M].北京:高等教育出版社,2006.152-160.

SQL 数据库完整性

时间: 2024-09-29 06:05:36

SQL 数据库完整性的相关文章

SQL数据库的应用一(Day 24)

哈哈,又到了新的一周.我们也开始学习新的知识了,从今天开始学习SQL数据库的一些知识.今天主要讲了一些数据库.表的创建管理,和一些约束的定义使用.(这里使用的是SQL语句)下面我就具体总结一下. 总结: 创建数据库 补充的知识点: 1. 重命名数据库:sp_renamedb 原数据库名,新数据库名 2. 删除数据库:drop database 数据库名 创建表 首先需要掌握的知识点: 1. 主键或主键约束(关键字:primary key): 每行记录的唯一标识符,确保用户不能输入重复值,且不能输

SQL数据库

SQL是Structured Query Language(结构化查询语言)的缩写. SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的. SQL功能强大.简单易学.使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL. SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同. 在SQL中,存储模式(内模式)称为“存储文件”(stored file): 关系模式(模式

SQL数据库中的主键与外键的介绍

一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 : 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 用户表(用户名.密码.登录级别) 其中用户名是唯一的, 用户名就是一个主键 上机记录表(卡号,学号,姓名.序列号) 上机记录表中单一一个属性无法唯一标识一条记录,学号和姓名的组合才可以唯一标识一条记录,所以 学号和姓名的属性组是一个主键 上机记录表中的序列号不是成绩表的

数据库复习3——数据库完整性

数据库复习 CH5 完整性 5.1 完整性约束 数据库完整性是指数据库中数据在逻辑上的一致性.正确性.有效性和相容性,那么完整性约束就是指用户插入.修改和删除操作时,DBMS为了保证数据库逻辑上的一致性.正确性.有效性和相容性所必需要检查的约束条件 C.J.Date在<An Introduction to Database Systems>一书中描述了四种完整性约束: 类型约束 属性约束 关系变量约束 数据库约束 C.J.Date提出的理论多半是建立在他自创的Tutorial D这个概念型数据

复习六——数据库完整性

数据库完整性概念 数据库完整性是指保护数据库中数据的 正确性:数据的合法性 有效性:数据是否在有效范围内 相容性:指表示同一个事实的两个数据应该一致 完整性规则定义 D(Data):约束作用的数据对象 O(Operation):触发完整性检查的数据库操作,立即检查还是延迟检查. A(Assertion):数据对象要满足的断言或语义规则 C(Condition):受A作用的数据对象值的谓词 P(Procedure):违反完整性规则时触发的过程 完整性约束按约束作用类型分类 域完整性 域是一组具有相

第12讲:数据库完整性

大纲: 数据库完整性的概念及分类 SQL语言实现静态(列/关系)完整性 SQL语言实现动态完整性 一.前言 1. 数据库完整性是数据库的一种特性(在任何情况下的正确性.有效性和一致性),其由DBMS保证实现 ①广义完整性:语义完整性.并发控制.安全控制.故障恢复 ②狭义完整性:特指语义完整性,DBMS通常有专门的完整性管理机制与程序来处理语义完整性问题 2. 回顾关系模型中的三个完整性:实体完整性.参照完整性.用户自定义完整性 用户自定义完整性即是上述语义完整性,而这也是我们这讲的主题. 3.

SQL 数据库T-SQL语句查询

         SQL 数据库T-SQL语句查询 附加数据库的数据文件 查询表中种类是水果的出厂日期在201-04-01之后的 查询所有种类的总成本 以倒序的方式查询表中水果的成本 查询种类是蔬菜的并且价格在1-5之间 将product表中的名称,种类,出厂日期的数据保存在另一个名为product_new的表中,并查看 在products表和sales表中查询产品的名称.种类.成本.销售地点和销售价格. 在products表和sales表中查询销往海南的产品名称.种类.成本和销售价格. 查询年

根据.mdf文件查看 SQL数据库的版本信息

手上有 经理带来的一个教学管理系统,由于不知道开发环境,在向SQL2000附件数据库的时候 报出附加失败的信息 ,上网查知说的2005的数据库不能向2000添加,好吧 那我在安装一个2005的行吧?但是安装SQL2005的时候确出现了问百度一段时间后知道因为我的机器上安装VS2005的时候他会给你带一个SQL2005的简化版(sql2005express),正是这个原因在安装SQL2005开发版的时候才会出现问题,所以需要把自带的sql2005express删除在重新安装;2005的安装上之后

windows Server 2012安装SQL数据库步骤

第一步.下载SQL Server 2008R2文件 刻录成光盘放进光驱中 点击setup执行SQL安装 输入SQL产品密钥 相应的步骤 根据需求安装SQL server功能,本次功能全选 数据库的名称.安装位置,本次为默认安装 SQL数据库用户名.密码设置,此次为统一设置 身份验证模式 第一步 登录SQL数据库服务 开启远程服务 创建数据库