数据库实验系列之1数据库及数据库中表等数据库对象的建立实验(包括关系图、完整性、权限控制、视图、索引等内容)

实验1 SQL Server的安装

  • 实验目的
  1. 掌握SQL Server安装的硬件要求和系统要求。
  2. 熟悉SQL Server的安装步骤。
  3. 掌握SQL Server的卸载方法。
  4. 了解SQL Server的主要组件。
  5. 掌握登录和断开数据库服务器的方法。
  • 实验内容
  1. 检查计算机的软、硬件配置(CPU、内存、硬盘和操作系统)是否达到SQL Server的安装要求。
  2. 安装SQL Server
  1. 双击安装软件中的“Setup”程序图标,进入SQL Server安装中心。
  2. 输入有效的产品密钥、接受许可条款,并且安装“程序支持文件”。
  3. 根据需要选择安装组件。
  4. 进行服务器配置,配置服务的账户、启动类型、排序规则等。
  5. 进行数据库引擎配置,配置数据库管理员sa指定的密码。
  6. 进行安装配置规则的设置,确保状态列为“已通过”。
  7. 进入正式安装界面,等待安装进度完毕。
  • 查看“SQL Server Management Studio”“配置工具”和“导入和导出数据”等组件,并掌握其使用方法。
  • 使用运行安装软件的方法或者通过控制面板卸载SQL Server
  • 登录和断开数据库服务器。
  1. 分别使用Windows身份验证方式和SQL Server身份验证方式打开“SQL Server Management Studio”。
  2. 查看“对象资源管理器”是服务器中所有数据库对象的树视图。
  3. 断开与数据库服务器的连接。

安装过程展示

选择安装路径正在下载安装包正在安装
SQL SERVER完成安装,下面安装SSMS(SQL SERVER管理软件)
安装SSMS中

实验2 设计数据库、创建数据库和数据表

  • 实验目的
  1. 掌握在SQL Server中使用对象资源管理器和SQL命令创建数据库与修改数据库的方法。
  2. 掌握在SQL Server中使用对象资源管理器或者SQL命令创建数据表和修改数据表的方法(以SQL命令为重点)。
  • 实验内容

给定如表3.6、表3.7和表3.8所示的学生信息。
表3.6 学生表
学号 姓名 性别 专业班级 出生日期 联系电话
0433 张艳 女 生物04 1986-9-13
0496 李越 男 电子04 1984-2-23 1381290××××
0529 赵欣 男 会计05 1984-1-27 1350222××××
0531 张志国 男 生物05 1986-9-10 1331256××××
0538 于兰兰 女 生物05 1984-2-20 1331200××××
0591 王丽丽 女 电子05 1984-3-20 1332080××××
0592 王海强 男 电子05 1986-11-1
表3.7 课程表
课程号 课程名 学分数 学时数 任课教师
K001 计算机图形学 2.5 40 胡晶晶
K002 计算机应用基础 3 48 任泉
K006 数据结构 4 64 马跃先
M001 政治经济学 4 64 孔繁新
S001 高等数学 3 48 赵晓尘
表3.8 学生作业表
课程号 学号 作业1成绩 作业2成绩 作业3成绩
K001 0433 60 75 75
K001 0529 70 70 60
K001 0531 70 80 80
K001 0591 80 90 90
K002 0496 80 80 90
K002 0529 70 70 85
K002 0531 80 80 80
K002 0538 65 75 85
K002 0592 75 85 85
K006 0531 80 80 90
K006 0591 80 80 80
M001 0496 70 70 80
M001 0591 65 75 75
S001 0531 80 80 80
S001 0538 60 80

  1. 在SQL Server中使用对象资源管理器和SQL命令创建学生作业管理数据库,数据库的名称自定。
  1. 使用对象资源管理器创建数据库,请给出重要步骤的截图。
  2. 删除第(1)步创建的数据库,再次使用SQL命令创建数据库,请给出SQL代码。
  3. 创建数据库之后,如果有需要,可以修改数据库。
  1. 对表3.6,表3.7和表3.8,分别以下表的方式给出各字段的属性定义和说明。

字段名 数据类型 长度或者精度 默认值 完整性约束 …… …… …… …… …… …… …… ……

  1. 使用SQL命令在学生作业管理数据库中建立学生表、课程表和学生作业表,在实验报告中给出SQL代码。
  2. 在各个表中输入表3.6、表3.7和表3.8中的相应内容。

SQL语句代码

--使用SQL语句创建学生作业管理数据库
Create database 学生作业管理数据库;


--使用SQL语句创建表
use 学生作业管理数据库;
Create table 学生表(
	学号 int primary key not null,
	姓名 nvarchar(20) not null,
	性别 nchar(1) default '男' not null,
	专业班级 nvarchar(20) not null,
	出生日期 nvarchar(20) not null,
	联系电话 nvarchar(20) not null,
);
--修改学生表联系电话可以为空
alter table 学生表
alter column 联系电话 nvarchar(20);
alter table 学生表
alter column 出生日期 nvarchar(20);
Create table 课程表(
	课程号 nvarchar(20) primary key,
	课程名 nvarchar(20)not null,
	学分数 int not null,
	学时数 int not null,
	任课教师 nvarchar(20) not null,
);
alter table 课程表
alter column 学分数 float;
create table 学生作业表(
	课程号 nvarchar(20)  foreign key references 课程表(课程号),
	学号 int  foreign key references 学生表(学号),
	作业1成绩 int check (作业1成绩>=0 and 作业1成绩<=100),
	作业2成绩 int check (作业2成绩>=0 and 作业2成绩<=100) not null,
	作业3成绩 int check (作业3成绩>=0 and 作业3成绩<=100) not null,
);
alter table 学生作业表
alter column 作业2成绩 int ;
--插入学生表的数据
insert into 学生表 (学号,姓名,性别,专业班级,出生日期) 
	values(0433,'张艳','女','生物04',1986-9-13);
--上边写错出生日期,进行改正
update 学生表 set 出生日期='1986-9-13' where 学号=0433;
--继续插入数据
insert into 学生表 (学号,姓名,性别,专业班级,出生日期,联系电话) 
	values(0496,'李越','男','电子04','1984-2-23','1381290××××');
insert into 学生表 (学号,姓名,性别,专业班级,出生日期,联系电话) 
	values(0529,'赵欣','男','会计05','1984-1-27','1350222××××');
insert into 学生表 (学号,姓名,性别,专业班级,出生日期,联系电话) 
	values(0531	,'张志国','男','生物05','1986-9-10','1331256××××');
insert into 学生表 (学号,姓名,性别,专业班级,出生日期,联系电话) 
	values(0538,'于兰兰','女','生物05','1984-2-20',	'1331200××××');
insert into 学生表 (学号,姓名,性别,专业班级,出生日期,联系电话) 
	values(0591	,'王丽丽',	'女',	'电子05',	'1984-3-20	','1332080××××');
insert into 学生表 (学号,姓名,性别,专业班级,出生日期) 
	values(0592,'王海强','男','电子05','1986-11-1');


--查询学生表,查看数据
select * from 学生表;

--为课程表插入数据
insert into 课程表(课程号,课程名,学分数,学时数,任课教师) 
	values ('K001',	'计算机图形学',	2.5,	40,	'胡晶晶');
insert into 课程表(课程号,课程名,学分数,学时数,任课教师) 
	values ('K002'	,'计算机应用基础',	3	,48,	'任泉');
insert into 课程表(课程号,课程名,学分数,学时数,任课教师) 
	values ('K006',	'数据结构',	4,	64,	'马跃先');
insert into 课程表(课程号,课程名,学分数,学时数,任课教师) 
	values ('M001',	'政治经济学',	4	,64	,'孔繁新');
insert into 课程表(课程号,课程名,学分数,学时数,任课教师) 
	values ('S001',	'高等数学',	3,	48	,'赵晓尘');
--查询课程表
select * from 课程表;

--为学生作业表插入数据
insert into 学生作业表(课程号,学号,作业1成绩,作业2成绩,作业3成绩)
	values('K001',0433,	60,	75	,75);
insert into 学生作业表(课程号,学号,作业1成绩,作业2成绩,作业3成绩)
	values('K001',	0529	,70,	70,	60);
insert into 学生作业表(课程号,学号,作业1成绩,作业2成绩,作业3成绩)
	values('K001',	0531,	70,	80	,80),('K001',	0591,	80,	90,	90);
select * from 学生作业表;
--多行插入
insert into 学生作业表(课程号,学号,作业1成绩,作业2成绩,作业3成绩)
	values('K002',0496,80,80,90),
		('K002',0529,70,70,85),
		('K002',0531,80,80,80),
		('K002',0538,65,75,85),
		('K002',0592,75,85,85),
		('K006',0531,80,80,90),
		('K006',0591,80,80,80),
		('M001',0496,70,70,80),
		('M001',0591,65,75,75),
		('S001',0531,80,80,80);
insert into 学生作业表(课程号,学号,作业1成绩,作业3成绩)
	values('S001',0538,60,80);
--查询学生作业表
select * from 学生作业表;





--实验2第4问
select * from 课程表;
select * from 学生表;
select * from 学生作业表;

在这里插入图片描述在这里插入图片描述在这里插入图片描述

实验5 视图

  • 实验目的
  1. 掌握创建视图的方法。
  2. 掌握修改视图的方法。
  3. 掌握查询视图的方法。
  4. 掌握更新视图的方法。
  5. 掌握删除视图的方法
  • 实验内容
    根据第一部分实验中创建的学生作业管理数据库以及其中的学生表、课程表和学生作业表,进行以下操作。
  1. 创建一个电子05的学生视图(包括学号、姓名、性别、专业班级、出生日期)。
  2. 创建一个生物05的学生作业情况视图(包括学号、姓名、课程名、作业1成绩、作业2成绩、作业3成绩)。
  3. 创建一个学生作业平均成绩视图(包括学号、作业1平均成绩、作业2平均成绩、作业3平均成绩)。
  4. 修改第2题中生物05的学生作业情况视图,将作业2成绩和作业3成绩去掉。
  5. 向电子05的学生视图中添加一条记录,其中学号为0596,姓名为赵亦,性别为男,专业班级为电子05,出生日期为1986-6-8(除了电子05的学生视图发生变化之外,看看学生表中发生了什么变化?)。
  6. 将电子05的学生视图中赵亦的性别改为“女”(除了电子05的学生视图发生变化之外,看看学生表中发生了什么变化?)。
  7. 删除电子05的学生视图中赵亦的记录。
  8. 删除电子05的学生视图(给出SQL语句即可)。

SQL语句代码

--1.创建一个电子05的学生视图(包括学号、姓名、性别、专业班级、出生日期)。
create view 电子05学生视图
as
select 学号,姓名,性别,专业班级,出生日期 from 学生表 where 专业班级='电子05';

--2.创建一个生物05的学生作业情况视图(包括学号、姓名、课程名、作业1成绩、作业2成绩、作业3成绩)。

create view 生物05的学生作业情况
as
select  学生作业表.学号,姓名,课程名,作业1成绩,作业2成绩,作业3成绩 from 学生作业表,学生表,课程表
where 学生作业表.学号=学生表.学号 and 课程表.课程号=学生作业表.课程号 and 学生表.专业班级='生物05';


--3.创建一个学生作业平均成绩视图(包括学号、作业1平均成绩、作业2平均成绩、作业3平均成绩)。
create view 学生作业平均成绩
as
select 学号,avg(作业1成绩) as 作业1平均成绩,avg(作业2成绩) as 作业2平均成绩,avg(作业3成绩) as 作业3平均成绩 from 学生作业表
group by 学号;

--4.修改第2题中生物05的学生作业情况视图,将作业2成绩和作业3成绩去掉。
create view 生物05的学生作业情况修改 as
select 学号,姓名,课程名,作业1成绩
from 生物05的学生作业情况;

--5.向电子05的学生视图中添加一条记录,其中学号为0596,姓名为赵亦,性别为男,专业班级为电子05,出生日期为1986-6-8
-- (除了电子05的学生视图发生变化之外,看看学生表中发生了什么变化?)。

insert into 电子05学生视图(学号,姓名,性别,专业班级,出生日期) values 
(0596,'赵亦','男','电子05','1986-6-8');

--查询看一下视图内容
select * from 电子05学生视图;
select * from 学生表;

--6.将电子05的学生视图中赵亦的性别改为“女”
--(除了电子05的学生视图发生变化之外,看看学生表中发生了什么变化?)。
update 电子05学生视图 set 性别='女' where 姓名='赵亦';

--7.删除电子05的学生视图中赵亦的记录。
delete from 电子05学生视图
where 学号=596;
--8.删除电子05的学生视图(给出SQL语句即可)。
drop view 电子05学生视图;

在这里插入图片描述

实验6 完整性约束

针对实验一(学生课程数据库)或实验二(学生课程作业数据库)完成各种完整性约束的定义补充

SQL语句代码

--实验6
/*针对实验一(学生课程数据库)或实验二(学生课程作业数据库)完成各种完整性约束的定义补充
*/

--首先查询一波看有什么字段
select * from 学生表;
select * from 课程表;
select * from 学生作业表;
--关于学生表
/*这是添加主键的SQL语句,如果已经有主键则添加不成功
alter table 学生表
add constraint py_key1 primary key(姓名);
*/
/*--这是删除主键约束的SQL语句,如果no active则删除不成功
alter table 学生表
drop constraint PK__学生表__1CC396D29329FDB5;
*/


--计划将课程表的学时数定义为float 类型
alter table 课程表
alter column 学时数  float ;

--将学生作业表中3个作业成绩都定义为float类型,值在0到100 可以为null
/*
alter table 学生作业表
alter column 作业1成绩 float; 
*/
--出错原因:因为他有一个视图,所以改不成
/*消息 5074,级别 16,状态 1,第 25 行
对象'CK__学生作业表__作业1成绩__33D4B598' 依赖于 列'作业1成绩'。
消息 4922,级别 16,状态 9,第 25 行
由于一个或多个对象访问此 列,ALTER TABLE ALTER COLUMN 作业1成绩 失败。*/

在这里插入图片描述

实验7 权限管理

创建用户、角色,用GRANT语句授权,用REVOKE语句撤销授权,观察对数据库操作时权限控制的情况

SQL语句代码

use 学生作业管理数据库;
--首先把两个表创起来
create table P155_6_学生
(
	学号 int constraint py_key_155_6_学生 primary key,
	姓名 nvarchar(20),
	年龄 int constraint check_155 check(年龄>0 and 年龄<120),
	性别 nchar default '男',
	家庭住址 nvarchar(20),
	班级号 nvarchar(20) 
);
CREATE TABLE P155_6_班级
(
	班级号 int constraint py_key_155_6_班级 primary key,
	班级名 nvarchar(20),
	班主任 nvarchar(20),
	班长 nvarchar(20)
);
--创建用户U1、u2
create login U1 with password='123', default_database=学生作业管理数据库; 
create user U1  for login U1  with default_schema=dbo;



--开始授权
grant select
on  P155_6_学生
To U1
with grant OPTION;

--解除查询授权
revoke select on P155_6_学生 from U1 cascade;

 --删除数据库用户: 
drop user U1
--删除 SQL Server登陆帐户:
drop login U1;

--正式开始
--先创个U1、U2
create login U1 with password='123', default_database=学生作业管理数据库; 
create user U1  for login U1  with default_schema=dbo;

create login U2 with password='123', default_database=学生作业管理数据库; 
create user	U2  for login U2  with default_schema=dbo;

--开始授权
--1.授予U1两表所有权限,并可将权限授予他人
--该语句是错误的,但是还没有找到原因	grant all on  P155_6_班级,P155_6_学生 to U1 ;with grant option;
exec sp_addrolemember 'db_owner', 'U1';
--grant all privileges on table P155_6_班级,P155_6_学生 to U1 with grant option;


--2.授予U2对学生表具有查看权限,对家庭住址有更新权限
grant select,update(家庭住址) on  P155_6_学生 to U2;

--3.将对班级表查看权限授予所有用户
grant select on P155_6_学生 to public;

--4.将对学生表的查询、更新权限授予角色R1
create login R1 with password='123', default_database=学生作业管理数据库; 
create user R1 for login R1  with default_schema=dbo;
grant  select,update on P155_6_学生 to R1;

--5.将角色R1授予用户U1,并且U1可以继续授予其他角色
--错误,目前还找不到原因	GRANT  R1 TO U1 with admin option;


--第7题
create table P155_7_职工(
	职工号 int constraint pk_1 primary key,
	姓名 nvarchar(20),
	年龄 int constraint ck_1 check(年龄 between 0 and 100),
	职务 nvarchar(20),
	工资 float check(工资>0),
	部门号 int constraint fk_1 foreign key(部门号) references P155_7_部门(部门号)
);
create table P155_7_部门(
	部门号 int constraint pk_2 primary key,
	名称 nvarchar(20),
	经理名 nvarchar(20),
	地址 nvarchar(20),
	电话号 nvarchar(20)
);

--1.用户王明对两个表有select权限
create login 王明 with password='123', default_database=学生作业管理数据库; 
create user 王明 for login 王明  with default_schema=dbo;
GRANT select on  P155_7_部门 to 王明;
GRANT select on  P155_7_职工 to 王明;

--2.用户李勇对两个表有insert和delete权限
create login 李勇 with password='123',default_database=学生作业管理数据库;
create user 李勇 for login 李勇 with default_schema=dbo;
GRANT insert,delete on P155_7_部门 to 李勇;
GRANT insert,delete on P155_7_职工 to 李勇;

--3.每个职工只对自己的记录有select权限
	

--4.用户刘星对职工表有select权限,对工资字段有更新权限
create login 刘星 with password='123',default_database=学生作业管理数据库;
create user 刘星 for login 刘星 with default_schema=dbo;
GRANT select,update(工资) on P155_7_职工 to 刘星;

--5.用户张新具有修改这两个表的权限
create login 张新 with password='123',default_database=学生作业管理数据库;
create user 张新 for login 张新 with default_schema=dbo;
GRANT alter on P155_7_部门 to 张新;
GRANT alter on P155_7_职工 to 张新;

--6.用户周平具有这两个表的所有权限,并可以授权其他用户
create login 周平 with password='123',default_database=学生作业管理数据库;
create user 周平 for login 周平 with default_schema=dbo;
--ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
--GRANT all privileges  on P155_7_部门 to 周平 with grant option;
--GRANT all on P155_7_职工 to 周平 with grant option;

--7.用户杨兰具有从每个部门职工中select最高工资,最低工资,平均工资的权限,他不能查看每个人的工资
create login 杨兰 with password='123',default_database=学生作业管理数据库;
create user 杨兰 for login 杨兰 with default_schema=dbo;
create view P155
as 
select 名称,max(工资) as '最高工资',min(工资) as '最低工资',avg(工资) as '平均工资' from P155_7_职工 join
(select 部门号,名称 from P155_7_部门) as 新命名表 on P155_7_职工.部门号=新命名表.部门号
group by 名称;

GRANT select on P155 to 杨兰;

在这里插入图片描述

附 创建market表,后续将会使用

创建market表,其中包含客户表,商品表,订单表

  1. 查找所以上海客户的信息
  2. 查找所有商品的名称、库存量、价格、及折扣25%后的价格,并使用别名“Discount”标识折扣价,结果按价格由低到高排序
  3. 查找商品名中含“Computer”的商品的编号、名称、及价格
  4. 查找库存量大于100小于500的商品的名称、库存量和单价
  5. 查找2007年7月1日至2007年12月31日期间,订货金额大于30000的所有订单的客户姓名、商品名称、单价、单货数量、订货金额

SQL语句代码

create database market;
use market;
create table Customers(		--客户表
	CustomerID int constraint pk_1 primary key,   --客户编号为主键
	Cname nvarchar(20) not null,		--客户姓名
	City nvarchar(20)		--所在城市
);

create table Goods(	--商品表
	GoodID	int constraint pk_2 primary key,	--商品编号为主键 
	Gname	nvarchar(20) not null,		--商品名称
	Price	float not null,			--单价
	Provider	nvarchar(20) not	null,--供应商
	Stocks	int check(Stocks>=0),			--库存量
	Status	nvarchar(20)	--商品状态
);

create table Orders(	--订单表
	OrderID	 int constraint  pk_3 primary key,	--订单号
	GoodID	int constraint fk_1 foreign key references Goods(GoodID),	--商品编号
	CustomerID	int constraint fk_2 foreign key references Customers(CustomerID),--客户编号
	Quantity	int check(Quantity>0),--订货数量
	OrderSum	float ,--订货金额
	Date	nvarchar(20)	--日期
);


--查找所以上海客户的信息
select * from Customers where City='上海';

--查找所有商品的名称、库存量、价格、及折扣25%后的价格,并使用别名“Discount”标识折扣价,结果按价格由低到高排序
select Gname,Stocks,Price,Price*0.75 Discount from Goods order by Price asc;

--查找商品名中含“Computer”的商品的编号、名称、及价格
select GoodID,Gname,Price from Goods where Gname like '%Computer%';

--查找库存量大于100小于500的商品的名称、库存量和单价
select	Gname,Stocks,Price from Goods where Stocks between 100 and 500;

--查找2007年7月1日至2007年12月31日期间,订货金额大于30000的所有订单的客户姓名、商品名称、单价、单货数量、订货金额
select Cname,Gname,Price,Quantity,OrderSum 
	from Customers,Goods,Orders 
where Customers.CustomerID=Orders.CustomerID and Goods.GoodID=Orders.OrderID and 
	date between '2007-7-1' and '2007-12-31' and OrderSum>30000;

在这里插入图片描述在这里插入图片描述

posted @ 2020-05-18 09:24  security9968  阅读(4625)  评论(0编辑  收藏  举报