5.4 索引的建立
因为每一个表建立,SSMS会自动生成一个聚集索引,所以不需要再手动建立聚集索引。
下面根据4.2来建立索引:
(1) 教师编号lh:create unique index SY_教师编号lh on Teacherslh(教师
编lh)
号
(2) 专业编号lh:create unique index SY_专业编号lh on Majorslh(专业编号
lh)
(3) 班级编号lh,专业编号lh:create unique index SY_班专lh on Classeslh(班
级编号lh,专业编号lh)
21
(4) 课程编号lh:create unique index SY_课程编号lh on Courseslh(课程编
号lh)
(5) 学生学号lh,班级编号lh:create unique index SY_学班lh on
Studentslh(学生学号lh,班级编号lh)
22
(6) 学生学号lh,课程编号lh:create unique index SY_学课lh on Studylh(学
生学号lh,课程编号lh)
5.5 触发器建立
(1)当删除教师表Teacherslh中的教师编号lh记录时,需要相应地删除授课表Instructlh和上课表Teachlh里的教师编号lh,所以在教师表Teacherslh上建立触发器
sql语句:
create trigger tr_del_教师编号lh ON Teacherslh for delete as
delete 教师编号lh
where Instructlh.教师编号lh = (select 教师编号lh from deleted) AND Teachlh.教师编号lh = (select 教师编号lh from deleted)
sql执行结果:
23
(2)当更新教师表Teacherslh中的教师编号lh记录时,需要相应地更新授课表Instructlh和上课表Teachlh里的教师编号lh,所以在教师表Teacherslh上建立触发器
sql语句为:
create trigger tr_upd_教师编号lh ON Teacherslh for update as
if update (教师编号lh) begin
update Instructlh
set 教师编号lh = i.教师编号lh
from deleted d,inserted i ,Instructlh k where k.教师编号lh=d.教师编号lh end begin
update Teachlh
set 教师编号lh = i.教师编号lh
from deleted d,inserted i ,Teachlh s where s.教师编号lh=d.教师编号lh end
sql语句执行结果:
5.6存储过程建立
(1)建立一个对学生表插入信息的存储过程
24
sql语句如下:
create procedure pro_学生表插入信息lh @sno char(20), @sname char(12), @ssex char(2), @sage int,
@ssourcead char(20), @scredit int, @sclass char(12) as
insert Studentslh(学生学号lh, 学生姓名lh, 学生性别lh, 学生年龄lh, 生源所在地lh, 已修学分总数lh, 班级编号lh)
Values(@sno,@sname,@ssex,@sage,@ssourcead,@scredit,@sclass) SELECT *
FROM Studentslh Go
Sql执行结果如下:
(2)建立一个输入成绩,自动生成其总学分的存储过程 sql语句如下:
create procedure pro_输入成绩自动生成学分lh @学生学号lh char(20), @课程编号lh char(12), @课程名lh char(20), @学期lh char(10), @成绩lh int,
@教师姓名lh char(10), @学分lh int as begin
insert into pro选修lh
values( @学生学号lh,@课程编号lh,@成绩lh )
update Studentslh
set Studentslh.已修学分总数lh = Studentslh.已修学分总数lh + @学分lh
25