希赛考试网
首页 > 软考 > 系统分析师

数据库完整性约束实验

希赛网 2023-11-24 18:45:36

概述

数据库完整性是指数据库中数据的精确度、有效性和一致性。为了确保数据库中的数据保持完整性,开发人员必须实现各种完整性约束,例如主键、外键、非空等。本文将以实验的方式探究数据库完整性约束如何应用。

实验环境

本实验使用MySQL数据库管理系统,MySQL Workbench作为图形化界面。

实验目标

1. 创建数据库,命名为“exp_integrity_test”;

2. 创建三个数据表,分别为“student”、“course”、“score”;

3. 定义适当的数据表结构;

4. 应用完整性约束;

5. 插入数据并测试数据表的完整性;

6. 修改数据表并测试完整性约束的影响。

实验步骤

步骤一:创建数据库和数据表

使用以下命令创建名为“exp_integrity_test”的数据库:

```sql

CREATE DATABASE exp_integrity_test;

```

使用以下命令在该数据库中创建三个数据表:

```sql

CREATE TABLE student(

stu_id INT(11) PRIMARY KEY,

stu_name VARCHAR(20) NOT NULL,

stu_age INT(11) NOT NULL

);

CREATE TABLE course(

cou_id INT(11) PRIMARY KEY,

cou_name VARCHAR(20) NOT NULL

);

CREATE TABLE score(

score_id INT(11) PRIMARY KEY,

stu_id INT(11),

cou_id INT(11),

score INT(11),

FOREIGN KEY(stu_id) REFERENCES student(stu_id),

FOREIGN KEY(cou_id) REFERENCES course(cou_id)

);

```

步骤二:定义数据表结构

在创建数据表时,我们定义了三个数据表的结构,具体如下:

- student表包含三个列:stu_id、stu_name、stu_age。其中,stu_id是主键,stu_name和stu_age列不允许为空。

- course表包含两个列:cou_id、cou_name。其中,cou_id是主键,cou_name列不允许为空。

- score表包含四个列:score_id、stu_id、cou_id、score。其中,score_id是主键,stu_id和cou_id列为外键,参照student表和course表中的主键。score列存储成绩。

步骤三:应用完整性约束

我们将应用以下完整性约束,以确保数据的完整性:

- student表的stu_id是主键,stu_name和stu_age列不允许为空;

- course表的cou_id是主键,cou_name列不允许为空;

- score表的score_id是主键,stu_id和cou_id列为外键,参照student表和course表中的主键。

以下脚本用于创建上述完整性约束:

```sql

ALTER TABLE student ADD CONSTRAINT student_primary_key PRIMARY KEY (stu_id);

ALTER TABLE student MODIFY COLUMN stu_name VARCHAR(20) NOT NULL;

ALTER TABLE student MODIFY COLUMN stu_age INT(11) NOT NULL;

ALTER TABLE course ADD CONSTRAINT course_primary_key PRIMARY KEY (cou_id);

ALTER TABLE course MODIFY COLUMN cou_name VARCHAR(20) NOT NULL;

ALTER TABLE score ADD CONSTRAINT score_primary_key PRIMARY KEY (score_id);

ALTER TABLE score ADD CONSTRAINT score_stu_fk FOREIGN KEY (stu_id) REFERENCES student(stu_id);

ALTER TABLE score ADD CONSTRAINT score_cou_fk FOREIGN KEY (cou_id) REFERENCES course(cou_id);

```

步骤四:插入数据及测试

我们将使用以下SQL语句向数据表中插入数据:

```sql

-- 添加学生

INSERT INTO student (stu_id, stu_name, stu_age) VALUES (1, '张三', 20);

INSERT INTO student (stu_id, stu_name, stu_age) VALUES (2, '李四', 21);

INSERT INTO student (stu_id, stu_name, stu_age) VALUES (3, '王五', 19);

INSERT INTO student (stu_id, stu_name, stu_age) VALUES (4, '赵六', 20);

-- 添加课程

INSERT INTO course (cou_id, cou_name) VALUES (1, '数学');

INSERT INTO course (cou_id, cou_name) VALUES (2, '英语');

INSERT INTO course (cou_id, cou_name) VALUES (3, '物理');

-- 添加成绩

INSERT INTO score (score_id, stu_id, cou_id, score) VALUES(1, 1, 1, 80);

INSERT INTO score (score_id, stu_id, cou_id, score) VALUES(2, 1, 3, 90);

INSERT INTO score (score_id, stu_id, cou_id, score) VALUES(3, 2, 1, 70);

```

然后,我们将测试一下上述语句对完整性约束的影响:

- 尝试向student表插入一条stu_id为空的记录,数据库弹出错误信息“Error Code: 1048. Column 'stu_id' cannot be null”。

- 尝试向course表插入一条cou_name为空的记录,数据库弹出错误信息“Error Code: 1364. Field 'cou_name' doesn't have a default value”。

- 尝试向score表插入一条参照不存在的学生记录的成绩,数据库弹出错误信息“Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails”。

步骤五:修改数据及测试

我们将修改stu_id为1的学生的stu_id为2,并测试完整性约束的影响:

尝试执行以下SQL语句:

```sql

UPDATE student SET stu_id = 2 WHERE stu_id = 1;

```

数据库会弹出错误信息“Error Code: 1062. Duplicate entry '2' for key 'PRIMARY'”,这说明主键不能重复。

步骤六:删除约束

我们可以使用以下命令删除约束:

```sql

ALTER TABLE student DROP PRIMARY KEY;

ALTER TABLE student MODIFY COLUMN stu_name VARCHAR(20) NULL;

ALTER TABLE student MODIFY COLUMN stu_age INT(11) NULL;

ALTER TABLE course DROP PRIMARY KEY;

ALTER TABLE course MODIFY COLUMN cou_name VARCHAR(20) NULL;

ALTER TABLE score DROP PRIMARY KEY;

ALTER TABLE score DROP FOREIGN KEY score_stu_fk;

ALTER TABLE score DROP FOREIGN KEY score_cou_fk;

```

系统分析师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
系统分析师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件