河南工业大学实验报告
课程 ++数据库系统原理及应用++ _ 实验名称:++实验一 数据库定义++
院 系____++信息科学与工程学院++ ____ 专业班级__++物联网2303++
姓 名++杜子健 ___++ 学 号++231040700302++
指导老师:++张梦雅++ 日 期++2025-11-17++
- 实验目的
- 掌握创建、删除数据库语句。
- 掌握创建、修改和和删除基本表语句。
- 掌握插入元组的基本语句。
- 实验内容及要求
- 运行SQL Server 2008,构建SCT数据库,其表结构说明详见《实验一 数据库定义实验说明.doc》所示。
- 按照《实验一 数据库定义实验说明.doc》中规定的实验任务写出SQL语句,并对得出的结果进行截图。
- 实验过程及结果
- 创建数据库sql
-- 创建学生选课数据库
create database SCT;
执行结果:数据库SCT创建成功
- 创建数据表(考虑完整性约束)
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 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:向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成功解决了中文乱码问题。
本次实验让我掌握了数据库从设计到实现的完整流程,理解了表结构定义、约束设置、数据插入等关键环节。特别是对外键关系的处理,让我认识到数据库各表之间关联性的重要性。这些实践经验为后续的数据库学习奠定了坚实基础,也培养了我严谨的数据管理意识。