视图: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