mysql 存储过程、触发器、视图、事件

191 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

 使用方式如下

使用的测试表如图

teacher表

​编辑

 student表

​编辑

 示例

-- 存储过程
delimiter //
create procedure db1.s()
begin
    select * from db1.student;
end //
delimiter ;
use db1;
-- 调用存储过程
call db1.s();

-- 触发器
delimiter //
-- before insert on 在xx表插入之前 for each row 插入的每一条都执行
create trigger c1 before insert on student for each row
    begin
   set new.stid=2,new.addr='天津';
    end //
delimiter ;
insert into student set name='救死扶伤';
drop trigger c1;
delimiter //
-- 触发器对同一个表进行插入修改删除时 不能在这个表进行其他操作 类似于锁机制
create trigger c2 after delete on student for each row
    begin
        insert into teacher set name=old.name;
    end //
delimiter ;
drop trigger c2;
delete from student where sid=2;
select * from teacher;
-- 事件
delimiter //
-- 设定事件创建十分钟后执行删除操作 执行过一次后会销毁
create event e1 on schedule at current_timestamp + interval 10 minute
    do
    begin
        delete from teacher where name= '逆天而行';
        select * from student;
    end //
delimiter ;
alter event e1 rename  to e3;
-- 此事件十分钟后执行 以后每三分钟执行一次 此事件会一直存在
delimiter //
create event e2 on schedule every 3 minute starts current_timestamp + interval 10 minute
    do
    begin
        insert into teacher set name='陈卸甲啊';
        insert into teacher set name='是卸甲啊';
    end //
delimiter ;
-- 删除事件
drop event e2;
-- 禁用事件 但不销毁
alter event e2 disable;
-- 开启事件
alter event e2 enable;
-- 视图 修改视图中的数据会影响到基表 修改基表也会影响到视图
delimiter //
create view v1 as select * from teacher;
delimiter ;
update v1 set name='陈卸甲' where tid=1;
select v1.tid, name from v1;

\