实验一 数据库定义

河南工业大学实验报告

课程 ++数据库系统原理及应用++ _ 实验名称:++实验一 数据库定义++

院 系____++信息科学与工程学院++ ____ 专业班级__++物联网2303++

姓 名++杜子健 ___++ 学 号++231040700302++

指导老师:++张梦雅++ 日 期++2025-11-17++

  • 实验目的
    1. 掌握创建、删除数据库语句。
    2. 掌握创建、修改和和删除基本表语句。
    3. 掌握插入元组的基本语句。
  • 实验内容及要求
    1. 运行SQL Server 2008,构建SCT数据库,其表结构说明详见《实验一 数据库定义实验说明.doc》所示。
    2. 按照《实验一 数据库定义实验说明.doc》中规定的实验任务写出SQL语句,并对得出的结果进行截图。
  • 实验过程及结果
  1. 创建数据库sql

-- 创建学生选课数据库

create database SCT;

执行结果:数据库SCT创建成功

  1. 创建数据表(考虑完整性约束)

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| use test01; CREATE TABLE Dept ( `D#` CHAR(2) PRIMARY KEY, Dname CHAR(10), Dean CHAR(10) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE Student ( `S#` CHAR(8) PRIMARY KEY, Sname CHAR(10) NOT NULL, Ssex CHAR(2), Sage INT, `D#` CHAR(2), Sclass CHAR(6), FOREIGN KEY (`D#`) REFERENCES Dept(`D#`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE Teacher ( `T#` CHAR(3) PRIMARY KEY, Tname CHAR(10), `D#` CHAR(2), Salary DECIMAL(8,2), FOREIGN KEY (`D#`) REFERENCES Dept(`D#`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE Course ( `C#` CHAR(3) PRIMARY KEY, Cname CHAR(12), Chours INT, Credit DECIMAL(2,1), `T#` CHAR(3), FOREIGN KEY (`T#`) REFERENCES Teacher(`T#`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE SC ( `S#` CHAR(8), `C#` CHAR(3), Score DECIMAL(3,1), PRIMARY KEY (`S#`, `C#`), FOREIGN KEY (`S#`) REFERENCES Student(`S#`), FOREIGN KEY (`C#`) REFERENCES Course(`C#`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |

结果如图所示。

3.给数据库插入数据

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| -- 1. 先插入院系数据 INSERT INTO Dept VALUES('01','计算机学院','李四'); INSERT INTO Dept VALUES('02','通信学院','王五'); INSERT INTO Dept VALUES('03','自动化学院','赵六'); INSERT INTO Dept VALUES('04','电气学院','孙七'); -- 2. 插入学生数据(注意年龄要在16-25之间) INSERT INTO Student VALUES('98030101','夏立雪','女',20,'03','980301'); INSERT INTO Student VALUES('98030102','梁文锋','男',22,'03','980301'); INSERT INTO Student VALUES('98030103','王兴兴','男',21,'03','980301'); INSERT INTO Student VALUES('98040101','雷军','男',23,'04','980402'); INSERT INTO Student VALUES('98040102','萌兰','男',19,'04','980402'); INSERT INTO Student VALUES('98040103','萌萌','男',20,'04','980402'); -- 3. 插入教师数据 INSERT INTO Teacher VALUES('001','张珊','01',4800.00); INSERT INTO Teacher VALUES('002','李思','02',5200.00); INSERT INTO Teacher VALUES('003','王武','03',5000.00); INSERT INTO Teacher VALUES('004','刘丽','04',4600.00); -- 4. 插入课程数据 INSERT INTO Course VALUES('001','数据库原理',64,4.0,'001'); INSERT INTO Course VALUES('002','计算机网络',48,3.0,'002'); INSERT INTO Course VALUES('003','自动控制',56,3.5,'003'); INSERT INTO Course VALUES('004','电力系统',48,3.0,'004'); -- 5. 插入选课数据 INSERT INTO SC VALUES('98030101','001',92.0); INSERT INTO SC VALUES('98030101','002',85.0); INSERT INTO SC VALUES('98030102','001',78.0); INSERT INTO SC VALUES('98030103','003',88.0); INSERT INTO SC VALUES('98040101','004',95.0); INSERT INTO SC VALUES('98040102','001',76.0); INSERT INTO SC VALUES('98040103','002',82.0); |

结果如图所示。

  1. 执行并分析操作

操作1:向Student表中插入学生元组:2017006050101、张三三四五、NV、28、05、20170060301

insert into Student values('2017006050101','张三三四五','NV',28,'05','20170060301');

分析:这个操作会失败,原因:学号长度超过定义的char(8),性别'NV'不在检查约束范围内(应为'男'或'女'),年龄28超过约束范围(16-25),院系'05'在Dept表中不存在。

修正后的操作:

-- 先在Dept表中添加05院系

insert into Dept values('05','测试学院','测试院长');

-- 然后插入修正后的学生数据

insert into Student values('17050101','张三','男',20,'05','170501');

操作2:向SC表中插入元组:98030101、006、98和98030201、004、102

insert into SC values('98030101','006',98);

insert into SC values('98030201','004',102);

分析:这个操作会失败,原因:课程'006'在Course表中不存在,学生'98030201'在Student表中不存在,成绩102超过约束范围(0-100)。

修正后的操作:

-- 插入有效的选课记录

insert into SC values('98030101','003',98); -- 使用存在的课程

insert into SC values('98030102','004',95); -- 使用存在的学生和课程

  • 实验中的问题及心得

通过本次实验,我深刻认识到数据库定义语言在实际应用中的重要性。在创建SCT数据库过程中,我遇到了几个关键问题:首先是在创建表结构时,需要特别注意外键约束的创建顺序,必须按照依赖关系先创建被引用的表;其次是完整性约束的设置,如学生年龄必须在16-25岁之间、性别只能为"男"或"女"等,这些约束条件能有效保证数据的有效性。

在数据插入阶段,我体会到了严格按照约束条件操作的必要性。最初尝试插入超出年龄范围的数据时遭到了系统拒绝,这让我理解了数据库完整性保护机制的作用。同时,字符集编码问题也给我留下了深刻印象,通过将字符集设置为utf8mb4成功解决了中文乱码问题。

本次实验让我掌握了数据库从设计到实现的完整流程,理解了表结构定义、约束设置、数据插入等关键环节。特别是对外键关系的处理,让我认识到数据库各表之间关联性的重要性。这些实践经验为后续的数据库学习奠定了坚实基础,也培养了我严谨的数据管理意识。

相关推荐
赤壁小虾14 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
MC皮蛋侠客14 小时前
SQLAlchemy 系列(七):高级建模与高效写入——批量 DML、方言与扩展
数据库·python
奈斯先生Vector15 小时前
把 Midjourney 二次编辑做成生产系统:customId 能力令牌、Action Graph 与 WebUI 精修工作台
数据库·人工智能·架构·aigc·音视频·midjourney
Lethehong15 小时前
双擎并驱·全链路并行:KFS让TB级异构增量同步秒级到达
数据库
MC皮蛋侠客15 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python
一水16 小时前
Redis实战:一个AI工作流系统里的五个应用场景,从传参到限流的完整链路
数据库·redis·wpf
枫叶v.17 小时前
Prompt Injection 防不住怎么办?从 Source-Sink 模型设计 Agent 安全边界
数据库·安全·prompt
Lucky_Turtle17 小时前
【Milvus】向量数据库
数据库
吴声子夜歌17 小时前
MongoDB 8.0——安全性
数据库·mongodb
xcLeigh17 小时前
KingbaseES 的卢智能运维体架构深度拆解
运维·数据库·人工智能·ai·架构·ffmpeg·智能体