/*
标题:数据库实践第二次作业
作者:030902207 黄福强
时间:2012-04-12
说明:
问题及描述:
--1.学生表
Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表
Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号
--3.教师表
Teacher(T#,Tname) --T# 教师编号,Tname 教师姓名
--4.成绩表
SC(S#,C#,score) --S# 学生编号,C# 课程编号,score 分数
*/
--(1) 数据库保护,备份还原,完整性,安全性
--备份所创建的数据库,还原数据库
exec sp_dropdevice 'sales_backup'
--添加一个名为sales_backup 的磁盘备份设备,其物理名称为f:\hfq\sales_backup.bak
exec sp_addumpdevice 'disk','sales_backup','f:\hfq\sales_backup.bak'
--BACKUP DATABASE 命令进行完整数据库备份
backup database hfq to sales_backup with noinit
--从sales_backup备份设备中还原完全数据库
USE master
GO
RESTORE DATABASE hfq
FROM disk = 'f:\hfq\sales_backup.bak'
--添加账号或 用户
create login hfq with password='hfq123456'
alter login hfq with name = hfq_new
alter login hfq_new with password = '123'
--drop login hfq_new
--对用户授予权限,收回权限
use hfq
go
create user user1 from login hfq_new
--给用户user1创建表的权限
use hfq
go
grant create table to user1
--收回用户user1创建表的权限
use hfq
go
revoke create table from user1
USE hfq
GO
GRANT SELECT,UPDATE,INSERT
ON SC TO user1
Go
--创建自定义约束(非空、唯一、唯一值、check)
--修改学生表,自定义 学生姓名不能为空 约束
alter table Student
add constraint ck_sname check(sname is not null)
--修改课程表,自定义 课程名不能重复,唯一 约束
alter table Course
add constraint unique_cname unique(cname)
--修改学生选课表,自定义 学生课程成绩在0-100分 约束
alter table SC
add constraint ck_sc_score check(score between 0 and 100)
--(2)触发器,存储过程的使用
create trigger tr_teacher
on teacher
after insert--(FOR ALTER_TABLE)当修改表结构时
--FOR | AFTER | INSTEAD OF [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ]
as
begin
print('刚刚插入一条数据在teacher表')
end
--test
insert into teacher(t#,tname)
values(09,'快快快')
--查看触发器
sp_helptrigger teacher--返回对当前数据库的指定表上定义的DML 触发器的类型
sp_help teacher
--创建insert插入类型触发器
if (object_id('insert_or_update_age', 'tr') is not null)
drop trigger insert_or_update_age
create trigger insert_or_update_age on student
for insert
as
begin
select s#,sname,sage,ssex from inserted;
end
insert into student(s#,sname,sage,ssex)
values(09,'hfq','1991-12-1 0:00:00','男')
if (object_id('insert_or_update_ssex', 'tr') is not null)
drop trigger insert_or_update_ssex
--如果插入的学生性别不是男跟女,赋值为男
create trigger insert_or_update_ssex on student
for insert
as
if((select ssex from inserted) not in('男','女'))
begin
update student set ssex = '男' where s#
in (select S# from inserted);
end
insert into student(s#,sname,sage,ssex)
values(19,'hfq2','1991-12-1 0:00:00','1')
---存储过程
exec sp_databases; --查看数据库
exec sp_tables; --查看表
--创建一个无参的存储过程,用左连接实现,用于查询学生及其选修的课程
if exists(select name from sysobjects where name='pro_student' and type='p')
Drop procedure pro_student
use hfq
go
create procedure pro_student
as
select temp.sname,c.cname from (
select sname,c#
from student s left join sc sc on
s.s# = sc.s#) temp left join
course c on
c.c# = temp.c#
--执行
exec pro_student
--创建一个带参数学号的存储过程,用于查询该学号对应
--的学生的姓名,选修的课程以及课程的成绩及其对应的老师
if exists(select name from sysobjects where name='pro_student_para' and type='p')
Drop procedure pro_student_para
create procedure pro_student_para
@no varchar(10)
as
select sname,cname,score,tname
from student s,sc sc,course c,teacher t
where s.s#=@no and s.s#=sc.s# and sc.C#=c.c# and c.t#=t.t#;
--执行
exec pro_student_para @no='01';
数据库实践第二次作业
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.