Note/大学笔记/数据库系统原理/练习题/第一次上机.md

7.3 KiB
Raw Blame History

一、上机内容

\1. 使用SQL语句创建数据库studentsdb。

create database studentsdb;

\2. 使用SQL语句选择studentsdb为当前使用数据库。

use studentsdb;

\3. 使用SQL语句在studentsdb数据库创建数据表student_info、curriculum、grade三个表的数据结构如表1-表3所示。

表1 student_info表结构

列名 数据类型 允许NULL值 主键
学号 char(4)
姓名 char(8)
性别 char(2)
出生日期 date
家庭住址 varchar(50)
create table student_info(
学号 char(4) not null PRIMARY KEY,
姓名 char(8) not null,
性别 char(2),
出生日期 date,
家庭住址 varchar(50)
);

image-20220923104156917

表2 表结构

列名 数据类型 允许NULL值 主键
课程编号 char(4)
课程名称 varchar(50)
学分 int
create table curriculum(
课程编号 char(4) not null PRIMARY KEY,
课程名称 varchar(50),
学分 int
);

截屏2022-09-23 10.43.40

表3 grade表结构

列名 数据类型 允许NULL值 主键
学号 char(4)
课程编号 char(4)
分数 int
create table grade(
学号 char(4) not null,
课程编号 char(4) not null,
分数 int,
PRIMARY KEY(学号,课程编号)
);

截屏2022-09-23 10.44.15

\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 滨江市新建路
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

表5 curriculum表的数据

课程编号 课程名称 学分
0001 计算机应用基础 2
0002 C语言程序设计 2
0003 数据库原理及应用 2
0004 英语 4
0005 高等数学 4
insert into curriculum(课程编号,课程名称,学分)
values('0001','计算机应用基础',2),
('0002','C语言程序设计',2),
('0003','数据库原理及应用',2),
('0004','英语',4),
('0005','高等数学',4);

截屏2022-09-23 10.45.30

表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
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

\5. 使用SQL语句ALTER TABLE修改curriculum表的“课程名称”列使之为空。

alter table curriculum modify 课程名称 varchar(50) not null;

image-20220923104648161

\6. 使用SQL语句ALTER TABLE修改grade表的“分数”列使其数据类型为decimal(5,2)。

alter table grade modify 分数 decimal(5,2);

image-20220923104705660

\7. 使用SQL语句ALTER TABLE为student_info表添加一个名为“备注”的数据列其数据类型为varchar(50)。

alter table student_info add 备注 varchar(50);

image-20220923104721475

\8. 使用SQL语句创建数据库studb并在此数据库下创建表stu表结构与数据与studentsdb的student_info表相同。

create database studb;
use studb;
create table stu as select * from studentsdb.student_info;

image-20220923104800750

\9. 使用SQL语句删除表stu中学号为0004的记录。

delete from stu where 学号 = '0004';

image-20220923104823284

10.使用SQL语句更新表stud中学号为0002的家庭住址为“滨江市新建路96号”。

update stu set 家庭住址 = '滨江市新建路96号' where 学号 = '0002' ;

image-20220923104902292

11.删除表stud的“备注”列。

alter table stu drop column 备注;

image-20220923104914868

二、实验思考

\1. 能通过一个CREATE DATABASE语句创建两个及以上的数据库吗

不能

\2. 删除了的数据库还能可能恢复吗?

一般来说是不能恢复的

\3. 对于studentsdb数据库的student_info表而言如果输入相同学号的记录将出现什么现象为什么

不能插入,导致插入冲突。

避免方式就是将学号设为主键,不能重复。

\4. 已经打开的表能删除吗?

可以