给定如表3.6、表3.7和表3.8所示的学生信息。 字段名 数据类型 长度或者精度 默认值 完整性约束 …… …… …… …… …… …… …… …… SQL语句代码 SQL语句代码 针对实验一(学生课程数据库)或实验二(学生课程作业数据库)完成各种完整性约束的定义补充 SQL语句代码 创建用户、角色,用GRANT语句授权,用REVOKE语句撤销授权,观察对数据库操作时权限控制的情况 SQL语句代码 创建market表,其中包含客户表,商品表,订单表 SQL语句代码数据库及数据库中表等数据库对象的建立实验(包括关系图、完整性、权限控制、视图、索引等内容)
实验1 SQL Server的安装
安装过程展示
实验2 设计数据库、创建数据库和数据表
表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
--使用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.创建一个电子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 完整性约束
--实验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 权限管理
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表,后续将会使用
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;
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算