mysql视图,触发器,存储函数

视图:view;是一种有结构(行列)但是没有结果(结构中不真实存放数据)的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生
语法:
create view 视图名字 as select语句。select语句可以是普通查询,多表查询和子查询
create view my_v1 as select * from student;
视图中有重名字段时,创建不成功
create view my_v2 as select s.* ,c.c_name from student s ,class c where s.cid=c.id
查看视图-------查看表的语句使用于查看视图

触发器:trigger 事先为某张表绑定好一段代码,当表中的某些内容发生改变的时候(增删改)系统会自动触发代码
事件类型:增删改
触发时间:前后:before after
触发对象:表中的每一条记录(行)
一张表只能有一种触发时间的一种类型的触发器,一张表最多6个触发器
创建触发器:
在mysql高级结构中没有大括号,使用对应的字符符号代替
语法:
--临时修改语句结束符
Delimiter 自定义符号 ,后续代码中只有碰到自定义符号才算结束
create trigger 触发器名字  触发时间  事件类型 on 表名  for each row
begin
     内容
end
自定义符号
Delimiter  ;分号前有空格

delimiter $$
create trigger  after_order after  insert on my_order for each row
begin
update goods set inv=inv-1 where id=2;
end
$$
delimiter  ;

查看
show trigger[like 'pattern']
show create trigger 触发器名字[/G]
所有的触发器都会保存一张表中: Information_schema.triggers
select * from Information_schema.triggers

删除:drop trigger 触发器名字
 
 
触发器记录:不管触发器是否触发,只要当某种操作准备执行,系统就会将当前要操作的
记录的当前状态和即将执行后新的状态分别保留下来,供触发器使用,其中,要操作的
当前状态保存到old中,操作之后的可能形态保存 到new
old代表旧记录,new代表新记录
删除的时候没有new,插入的时候没有old
使用方式:old.字段/new.字段
 
 
delimiter $$
create trigger  after_order after  insert on my_order for each row
begin
update goods set inv=new.number where id=new.id;
end
$$
delimiter  ;

存储函数:
DELIMITER $$
CREATE  FUNCTION fun_add(p1 INT ,p2 INT) RETURNS INT
BEGIN
set @i=0;   --@定义的变量是全局变量,没有的是局部变量
    RETURN p1+p2;
END $$
DELIMITER ;

存储过程:
create procedure 过程名字([参数列表])
begin
    过程体
end

猜你喜欢

转载自blog.csdn.net/lyf_ldh/article/details/81142198