Note/数据库系统原理/练习题/第一次上机.md
2023-08-31 12:43:36 +08:00

245 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

**一、上机内容**
\1. 使用SQL语句创建数据库studentsdb。
```sql
create database studentsdb;
```
\2. 使用SQL语句选择studentsdb为当前使用数据库。
```sql
use studentsdb;
```
\3. 使用SQL语句在studentsdb数据库创建数据表student_info、curriculum、grade三个表的数据结构如表1-表3所示。
表1 student_info表结构
| 列名 | 数据类型 | 允许NULL值 | 主键 |
| -------- | ----------- | ---------- | ---- |
| 学号 | char(4) | 否 | 是 |
| 姓名 | char(8) | 否 | 否 |
| 性别 | char(2) | 是 | 否 |
| 出生日期 | date | 是 | 否 |
| 家庭住址 | varchar(50) | 是 | 否 |
```sql
create table student_info(
学号 char(4) not null PRIMARY KEY,
姓名 char(8) not null,
性别 char(2),
出生日期 date,
家庭住址 varchar(50)
);
```
![image-20220923104156917](https://lsky.hhdxw.top/imghub/img/202209231042251.png)
表2 表结构
| 列名 | 数据类型 | 允许NULL值 | 主键 |
| -------- | ----------- | ---------- | ---- |
| 课程编号 | char(4) | 否 | 是 |
| 课程名称 | varchar(50) | 是 | 否 |
| 学分 | int | 是 | 否 |
```sql
create table curriculum(
课程编号 char(4) not null PRIMARY KEY,
课程名称 varchar(50),
学分 int
);
```
![截屏2022-09-23 10.43.40](https://lsky.hhdxw.top/imghub/img/%E6%88%AA%E5%B1%8F2022-09-23%2010.43.40.png)
表3 grade表结构
| 列名 | 数据类型 | 允许NULL值 | 主键 |
| -------- | -------- | ---------- | ---- |
| 学号 | char(4) | 否 | 是 |
| 课程编号 | char(4) | 否 | 是 |
| 分数 | int | 是 | 否 |
```sql
create table grade(
学号 char(4) not null,
课程编号 char(4) not null,
分数 int,
PRIMARY KEY(学号,课程编号)
);
```
![截屏2022-09-23 10.44.15](https://lsky.hhdxw.top/imghub/img/%E6%88%AA%E5%B1%8F2022-09-23%2010.44.15.png)
\4. 使用SQL语句INSERT向studentsdb数据库的student_info、curriculum、grade表插入数据各表数据如表4-表6所示。
表4 student_info表的数据
| 学号 | 姓名 | 性别 | 出生日期 | 家庭住址 |
| ---- | ------ | ---- | ---------- | -------------- |
| 0001 | 张青平 | 男 | 2000-10-01 | 衡阳市东风一路 |
| 0002 | 刘东阳 | 男 | 1998-12-09 | 东阳市八一北路 |
| 0003 | 马晓夏 | 女 | 1995-05-12 | 长岭市五一路 |
| 0004 | 钱忠理 | 男 | 1994-09-23 | 滨海市洞庭大道 |
| 0005 | 孙海洋 | 男 | 1995-04-03 | 长岛市解放路 |
| 0006 | 郭小斌 | 男 | 1997-11-10 | 南山市红旗路 |
| 0007 | 肖月玲 | 女 | 1996-12-07 | 东方市南京路 |
| 0008 | 张玲珑 | 女 | 1997-12-24 | 滨江市新建路 |
```sql
insert into student_info(学号,姓名,性别,出生日期,家庭住址)
values('0001','张青平','男','2000-10-01','衡阳市东风路77号'),
('0002','刘东阳','男','1998-12-09','东阳市八一北路33号'),
('0003','马晓夏','女','1995-05-12','长岭市五一路763号'),
('0004','钱忠理','男','1994-09-23','滨海市洞庭大道279号'),
('0005','孙海洋','男','1995-04-03','长岛市解放路27号'),
('0006','郭小斌','男','1997-11-10','南山市红旗路113号'),
('0007','肖月玲','女','1996-12-07','东方市南京路11号'),
('0008','张玲珑','女','1997-12-24','滨江市新建路97号');
```
![截屏2022-09-23 10.44.41](https://lsky.hhdxw.top/imghub/img/%E6%88%AA%E5%B1%8F2022-09-23%2010.44.41.png)
表5 curriculum表的数据
| 课程编号 | 课程名称 | 学分 |
| -------- | ---------------- | ---- |
| 0001 | 计算机应用基础 | 2 |
| 0002 | C语言程序设计 | 2 |
| 0003 | 数据库原理及应用 | 2 |
| 0004 | 英语 | 4 |
| 0005 | 高等数学 | 4 |
```sql
insert into curriculum(课程编号,课程名称,学分)
values('0001','计算机应用基础',2),
('0002','C语言程序设计',2),
('0003','数据库原理及应用',2),
('0004','英语',4),
('0005','高等数学',4);
```
![截屏2022-09-23 10.45.30](https://lsky.hhdxw.top/imghub/img/%E6%88%AA%E5%B1%8F2022-09-23%2010.45.30.png)
表6 grade表的数据
| 学号 | 课程编号 | 分数 |
| ---- | -------- | ---- |
| 0001 | 0001 | 80 |
| 0001 | 0002 | 91 |
| 0001 | 0003 | 88 |
| 0001 | 0004 | 85 |
| 0001 | 0005 | 77 |
| 0002 | 0001 | 73 |
| 0002 | 0002 | 68 |
| 0002 | 0003 | 80 |
| 0002 | 0004 | 79 |
| 0002 | 0005 | 73 |
| 0003 | 0001 | 84 |
| 0003 | 0002 | 92 |
| 0003 | 0003 | 81 |
| 0003 | 0004 | 82 |
| 0003 | 0005 | 75 |
```sql
insert into grade(学号,课程编号,分数)
values('0001','0001',80),
('0001','0002',91),
('0001','0003',88),
('0001','0004',85),
('0001','0005',77),
('0002','0001',73),
('0002','0002',68),
('0002','0003',80),
('0002','0004',79),
('0002','0005',73),
('0003','0001',84),
('0003','0002',92),
('0003','0003',81),
('0003','0004',82),
('0003','0005',75);
```
![image-20220923100729127](https://lsky.hhdxw.top/imghub/img/202209231007173.png)
\5. 使用SQL语句ALTER TABLE修改curriculum表的“课程名称”列使之为空。
```sql
alter table curriculum modify 课程名称 varchar(50) not null;
```
![image-20220923104648161](https://lsky.hhdxw.top/imghub/img/image-20220923104648161.png)
\6. 使用SQL语句ALTER TABLE修改grade表的“分数”列使其数据类型为decimal(5,2)。
```sql
alter table grade modify 分数 decimal(5,2);
```
![image-20220923104705660](https://lsky.hhdxw.top/imghub/img/image-20220923104705660.png)
\7. 使用SQL语句ALTER TABLE为student_info表添加一个名为“备注”的数据列其数据类型为varchar(50)。
```sql
alter table student_info add 备注 varchar(50);
```
![image-20220923104721475](https://lsky.hhdxw.top/imghub/img/image-20220923104721475.png)
\8. 使用SQL语句创建数据库studb并在此数据库下创建表stu表结构与数据与studentsdb的student_info表相同。
```sql
create database studb;
use studb;
create table stu as select * from studentsdb.student_info;
```
![image-20220923104800750](https://lsky.hhdxw.top/imghub/img/image-20220923104800750.png)
\9. 使用SQL语句删除表stu中学号为0004的记录。
```sql
delete from stu where 学号 = '0004';
```
![image-20220923104823284](https://lsky.hhdxw.top/imghub/img/image-20220923104823284.png)
10.使用SQL语句更新表stud中学号为0002的家庭住址为“滨江市新建路96号”。
```sql
update stu set 家庭住址 = '滨江市新建路96号' where 学号 = '0002' ;
```
![image-20220923104902292](https://lsky.hhdxw.top/imghub/img/image-20220923104902292.png)
11.删除表stud的“备注”列。
```sql
alter table stu drop column 备注;
```
![image-20220923104914868](https://lsky.hhdxw.top/imghub/img/image-20220923104914868.png)
**二、实验思考**
\1. 能通过一个CREATE DATABASE语句创建两个及以上的数据库吗
不能
\2. 删除了的数据库还能可能恢复吗?
一般来说是不能恢复的
\3. 对于studentsdb数据库的student_info表而言如果输入相同学号的记录将出现什么现象为什么
不能插入,导致插入冲突。
避免方式就是将学号设为主键,不能重复。
\4. 已经打开的表能删除吗?
可以