SQL数据库索引,存储过程,触发器笔记

索引

索引:像目录一样;
优点:加快查询速度;
缺点:增加索引后,会增加额外的存储空间。同时降低了增加,修改,删除的效率;
索引分两种:
聚集索引(表中物理顺序与逻辑顺序一致):一个表中只有一个聚集索引。
非聚集索引(表中物理顺序与逻辑顺序不一致):一个表中可以有多个非聚集索引。
创建聚集索引:

create clustered index Al_id on tblAlumni(Alu_ID)  --clustered为聚集索引;Al_id为自定义命名,tblAlumni(Alu_ID)括号外为表名,括号里为要建的列名

非聚集索引:

create index Al_id on tblAlumni(Alu_ID)  --Al_id为自定义命名,tblAlumni(Alu_ID)括号外为表名,括号里为要建的列名

索引的删除:

drop index tblAlumni.Al_id --tblAlumni为表名,Al_id为索引名

也可以添加唯一索引
例:

create unique index Al_id on tblAlumni(Alu_ID) --unique为唯一索引

注:在模糊查询的时候 'a%‘可以用索引,’%a%'不可以用索引;

存储过程

优点:模块化程序设计;提高执行速度;降低网络通信量;保证系统安全性;
缺点:数据库移植不方便;不容易维护;
带输入参数代码示例:
例:从三个表中查询某人指定班级的班级ID和学院ID

create proc pro_st1
@name varchar(50) ,@clname varchar(20) --@name和@clname都是自定义
As
select Alu_ID ,Alu_Name,Class_Name,Class_ID,Dpt_Id
from tblAlumni inner join tblClass on tblAlumni.Alu_Class=tblClass.Class_ID
inner join tblDepart on tblClass.Class_Dept=tblDepart.Dpt_Id --正常的SQL多表联查语句
where tblAlumni.Alu_Name=@name and tblClass.Class_Name=@clname
execute pro_st1 '王明','汽车10021' --执行数据存储

带output参数的存储过程代码示例:
例:用于计算指定学生的总分,存储过程中使用了一个输入参数和一个输出参数。

create proc total @name varchar(50),@total int output --同上
As
select @total=sum(credit) --计算学分总和
from student inner join sc on student.sno=sc.sno
inner join course on course.cno=sc.cno --student,sc,course表名,正常多表联查语句
where sname=@name group by student.学号 --通过学号类别返回值
declare @t_credit char(20),@total int --@t_credit自定义名字
execute total'王林',@total  output --执行数据存储,并返回值

存储过程的删除

drop procedure total --total存储过程组的名称

存储过程的修改

alter procedure --+所需要修改的存储过程组名称+修改内容

触发器

触发器是一种特殊的存储过程,其特殊性在于它并不需要由用户直接调用,当对表进行插入、删除、修改等操作时自动执行。
触发器不允许带参数,也不允许被调用,不能返回任何结果;
触发器触发时系统自动在内存中创建deleted表或inserted表。
在这里插入图片描述
触发器分类:DML触发器和DDL触发器
语法:
在这里插入图片描述
示例代码:
例:建立一个学生表与选课表间来维护参照完整性而使用的级联删除触发器、级联修改触发器和受限插入触发器。
级联删除触发器代码:

create trigger ex1
on student for after delete
as 
delete from sc where sno =(select sno from deleted) --sno在deleted表里面

级联修改触发器代码:

create trigger ex2
on student for after update
as
update sc set sno =(select sno from inserted) --更新后的sno 在inserted表里,所以把更新后的sno赋给sc表里的sno
where sno=(select sno from deleted) --查更新的是谁,在deleted表里,

受限插入触发器代码:

create trigger ex3
on sc for after insert
as
delete from sc where sno=(select sno from inserted where sno not in (select sno from student))
or cno=(select cno from inserted where cno not in (select cno from course))

触发器的删除代码:

drop trigger 触发器名称

触发器的查看代码:

show create trigger 触发器名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值