数据库系统概论 实验四 数据控制(完整性)

1实验目的

1.熟悉通过SQL对数据进行完整性控制。
2.完成书本上习题的上机练习。

2实验工具MYSQL

Mysql 命令行工具

3实验内容和要求

使用SQL对数据进行完整性控制(3类完整性、CHECK短语、CONSTRAIN子句、触发器)。用实验证实,当操作违反了完整性约束条件时,系统是如何处理的。根据以下要求认真填写实验报告,记录所有的实验用例。

4实验步骤

4.1三类完整性

4.1.1实体完整性

关系模式的实体完整性在create table中用primary key定义,
定义主码的方式分为定义为列级约束条件和定义表级约束条件两种。

(1)定义Student,并将其中的Sno属性定义为主码:
CREATE TABLE STUDENT(
SNO CHAR(9) PRIMARY KEY,
SNAME CHAR(8) NOT NULL,
SSEX CHAR(2),
SAGE SMALLINT,
SDEPT CHAR(20));

或者:

CREATE TABLE STUDENT(
SNO CHAR(9),
SNAME CHAR(8) NOT NULL,
SSEX CHAR(2),
SAGE SMALLINT,
SDEPT CHAR(20),
PRIMARY KEY(SNO)
);

创建成功后,查看student的结构如下:

验证参照性:
使用插入语句,插入已有的学号,按照主码的实体完整性约束,应该插入失败:

INSERT INTO STUDENT VALUES(‘201215121’,’李勇’,’男’,’20’,’CS’);

验证成功。

(2)定义表SC,将其中的属性Sno,Cno定义为主码:
CREATE TABLE SC(
SNO CHAR(9) NOT NULL,
CNO CHAR(4) NOT NULL,
GRADE SMALLINT,
PRIMARY KEY(SNO,CNO));

创建成功后,查看表的结构如下:

验证:

insert into SC values(‘201215122’,’2’,’90’);

4.1.2参照完整性

关系模型的参照完整性是再create table中用foreign key语句来定义的,并用references来知名外码参照宝的是哪些表的主码。

定义表SC,其中Sno参照表Student的主码Sno,Cno参照表Sourse的主码Cno。

CREATE TABLE SC(
SNO CHAR(9) 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)
);

创建成功后,表的结构如下:

分析:好像没用。Extra一列什么东西都没有。其实extra表示其他信息,和外码无关。
用[show create table sc;] 命令查看该表的所有结构,确实显示外键创建成功:

验证:
插入一条学号不属于student表的信息:

insert into SC values(‘201115122’,’2’,’90’);

验证成功,显示:
Cannot add or update a child row: a foreign key constraint fails (lab.sc, CONSTRAINT sc_ibfk_1 FOREIGN KEY (SNO) REFERENCES student (Sno))

4.1.3用户自定义完整性

在create table中定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值约束,包括:

  • 列值非空(not null)
  • 列值唯一(unique)
  • 检查列值是否满足一个条件表达式(check短语)
(1)不允许取空值:

定义SC表时,Sno、Cno和Grade属性都不允许取空值,在不特别声明的情况下,非码属性的值是允许取空值的。

CREATE TABLE SC(
SNO CHAR(9) NOT NULL,
CNO CHAR(4) NOT NULL,
GRADE SMALLINT NOT NULL,
);

懒得删除重建,直接使用alter修改约束条件:

ALTER TABLE SC
MODIFY GRADE SMALLINT NOT NULL;

结果如下:

验证:

INSERT INTO SC VALUES(‘201215122’,’2’,NULL);

  • 12
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值