數據庫實踐第二次作業

/*    
標題:數據庫實踐第二次作業  
作者: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';

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章