SQL语法基础(二)——视图,触发器,存储过程


一、视图

视图是虚拟的表,本身不包含数据。
视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化
视图的操作和普通表的操作一样
作用:
1.可以将重复、多次使用的查询语句封装到视图,
2.通过只给用户访问视图的权限,保证数据的安全性;
例子:
建立信息系学生的视图:

CREATE VIEW IS_Student 
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';

建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生

CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS'
WITH CHECK OPTION;

定义IS_Student视图时加上了WITH CHECK OPTION子句,对该视图进行插入、修改和删除操作时,RDBMS会自动加上Sdept=‘IS’的条件
1.若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但是保留了主码,则称这类视图为行列子集视图
2.视图还可以建立在一个或者多个已定义好的视图上
3.可以用带有聚集函数和group by子句的查询来定义视图,这种视图称为分组视图
例子:
定义一个反映学生出生年份的视图

create view bt_s(sano,sname,sbirth)
as
select sno,sname,2014-sage
from student;

删除
1.普通删除
drop view 视图名
2.如果该视图上还导出了其他视图,则需要使用级联删除语句
drop view 视图名 cascade
可以删除视图和由它导出的所有视图

二、存储过程

我觉得可以理解为自定义函数
使用存储过程的好处:

  • 代码封装,保证了一定的安全性;
  • 代码复用; 由于是预先编译,
  • 因此具有很高的性能。

命令行中创建存储过程需要用delimiter自定义分隔符,因为命令行是以 ; 为结束符,而存储过程中也包含了分号,因此会错误把这部分分号当成是结束符,造成语法错误。
包含 in、out 和 inout 三种参数。
给变量赋值都需要用 select into 语句。
每次只能给一个变量赋值,不支持集合的操作。

DELIMITER //
CREATE PROCEDURE 存储过程名(in变量名 类型,out 参数 2...)
	BEGIN
		[DECLARE 变量名 类型 [DEFAULT];]
		存储过程的语句块;
	END//
DELIMITER ;

例子:

delimiter //
create procedure myprocedure( out ret int )
    begin
        declare y int;
        select sum(col1)
        from mytable
        into y;
        select y*y into ret;
    end //
delimiter ;

调用:
call 存储过程

三、触发器

触发器会在某个表执行以下语句时而自动执行: DELETE、INSERT、UPDATE
触发器必须指定在语句执行之前还是之后自动执行,之前执行使用 BEFORE 关键字,之后执行使用 AFTER 关键字。
BEFORE 用于数据验证和净化,
AFTER 用于审计跟踪,将修改记录到另外一张表中。

CREATE TRIGGER mytrigger 
AFTER INSERT ON mytable
FOR EACH ROW 
Begin
执行语句
End

MySQL 不允许在触发器中使用 CALL 语句,也就是不能调用存储过程。


总结

复习中,简单记录一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值