/*
標題:數據庫實踐第二次作業
作者: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';
數據庫實踐第二次作業
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.