千家信息网

MySql视图触发器存储方法

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了MySql视图触发器存储方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。视图:一个临时表被反复使用的时候,对这个临时表起一个别名,方便以后使用,就可以
千家信息网最后更新 2026年10月31日MySql视图触发器存储方法

这篇文章主要讲解了MySql视图触发器存储方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

视图:

  一个临时表被反复使用的时候,对这个临时表起一个别名,方便以后使用,就可以创建一个视图,别名就是视图的名称。视图只是一个虚拟的表,其中的数据是动态的从物理表中读出来的,所以物理表的变更回改变视图。

  创建:

    create view v1 as SQL

例如:create view v1 as select * from student where sid<10

创建后如果使用mysql终端可以看到一个叫v1的表,如果用navicate可以在视图中看到生成了一个v1的视图

再次使用时,可以直接使用查询表的方式。例如:select * from v1

  修改:只能修改视图中的sql语句

    alter view 视图名称 as sql

  删除:

    drop view 视图名称

触发器:

  当对某张表做增删改查的时候(之前后者之后),就可以使用触发器自定义关联行为。

  修改sql语句中的终止符号 delimiter

before after 之前之后

-- delimiter //  -- before或者after定义操作(insert或其他)之前或之后的操作-- on 代表那张表发生操作后引发触发器操作 -- CREATE TRIGGER t1 BEFORE INSERT on teacher for EACH row-- BEGIN-- INSERT into course(cname) VALUES('奥特曼');-- END //-- delimiter ;  -- insert into teacher(tname) VALUES('triggertest111')---- delimiter // -- CREATE TRIGGER t1 BEFORE INSERT on student for EACH row-- BEGIN-- INSERT into teacher(tname) VALUES('奥特曼');-- END //-- delimiter ;  -- insert into student(gender,sname,class_id) VALUES('男','1小刚111',3);-- 删除触发器-- drop trigger t1;  -- NEW 和 OLD 代指新老数据 使其数据一致-- delimiter //-- create TRIGGER t1 BEFORE insert on student for each row-- BEGIN --这里的new 指定的是新插入的数据,old通常用在delete上 -- insert into teacher(tname) VALUES(NEW.sname);-- end //-- delimiter ;insert into student(gender,sname,class_id) VALUES('男','蓝色的大螃蟹',3);

存储过程:

本质上就是一堆sql的集合,然后给这个集合起个别名。和view的区别就是,视图是一个sql查询语句当成一个表。

    方式:

      1 msyql----存储过程,供程序调用

      2 msyql---不做存储过程,程序写sql

      3 mysql--不做存储过程,程序写类和对象(转化成sql语句)    

    创建方法:

-- 1 创建无参数的存储过程
-- delimiter //
-- create PROCEDURE p1()
-- BEGIN
-- select * from student;
-- insert into teacher(tname) VALUES('cccc');
-- end //
-- delimiter ;

-- 调用存储过程

 call p2(5,2)

pymysql中 cursor.callproc('p1',(5,2))
--  2 带参数 in 参数 -- delimiter //-- create PROCEDURE p2(--  in n1 int,-- in n2 int-- )-- BEGIN--  select * from student where sid
call p2(5,2)

pymysql中 cursor.callproc('p1',(5,2))
-- 3  out参数 在存储过程入参时 使用out则 该变量可以在外部进行调用--    存储过程中没有return 如果想要在外部调用变量则需要使用out-- delimiter //-- create PROCEDURE p3(--  in n1 int,-- out n2 int-- )-- BEGIN--  set n2=444444;--  select * from student where sid

  为什么有了结果集,又要有out伪造返回的值?

      因为存储过程中含有多个sql语句,无法判断所有的sql都能执行成功,利用out的特性来标识sql是否执行成功。

      例如,如果成功标识为1 部分成功标识2 失败为3

  存储过程中的事务:

    事务:

      被成为原子性操作。DML(insert,update,delete)语句共同完成,事物只和DML语句相关,或者锁只有DML才有事物。

    事务的特点:

      原子性 A :事务是最小单位,不可分割

      一致性 C :事务要求所有dml语句操作的时候必须保证全部成功或者失败

      隔离性 I : 事务A和事务B之间有隔离性

      持久性 D : 是事务的保证,事务终结的标志(内存中的数据完全保存到硬盘中)

    事务关键字:

      开启事务:start transaction

      事务结束 :end transaction

      提交事务 :commit transaction

      回滚事务 :rollback transaction

    事务的基本操作

delimiter // create procedure p5( in n1 int, out n2 int ) begin 1 声明如果出现异常执行(   set n2=1;   rollback;  )  2 开始事务     购买方账号-100        卖放账号+100        commit  3 结束    set n2=2   end //      delimiter ;    这样 既可以通过n2 检测后到错误 也可以回滚    以下是详细代码delimiter //  create procedure p6(  out code TINYINT  )  begin   声明如果碰到sqlexception 异常就执行下边的操作   DECLARE exit HANDLER for SQLEXCEPTION   begin    --error      set code=1;      rollback;   end;   START TRANSACTION;       delete from tb1;       insert into tb2(name)values('slkdjf')   commit;   ---success   code=2   end //delimiter ;

    游标在存储过程中的使用:

delimiter //create procedure p7() begin    declare row_id int;     declare row_num int;     declare done int DEFAULT FALSE;     声明游标     declare my_cursor cursor for select id,num from A;     声明如果没有数据 则将done置为True     declare continue handler for not found set done=True;               open my_cursor;  打开游标         xxoo;LOOP   开启循环叫xxoo            fetch my_cursor into row_id,row_num;              if done then 如果done为True 离开循环                leave xxoo;              end if;              set temp=row_id+row_num;       insert into B(number)VALUES(temp);            end loop xxoo; 关闭循环      close my_cursor;    end //     delimiter ;  以上代码 转化成python for row_id,row_num in my_cursor:  检测循环中是否还有数据,如果没有则跳出 break    break    insert into B(num) values(row_id+row_num)

    动态的执行sql,数据库层面放置sql注入:

delimiter \\create procedure p6( in nid int) begin  1 预编译(预检测)某个东西 sql语句合法性   2 sql=格式化tpl+arg    3 执行sql   set @nid=nid    prepare prod from 'select * from student where sid>?'    EXECUTE prod using @ nid;    deallocate prepare prod  end \\  delimiter ;

看完上述内容,是不是对MySql视图触发器存储方法有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。

存储 事务 过程 视图 语句 数据 触发器 成功 变量 参数 名称 循环 方法 内容 就是 时候 标识 游标 程序 检测 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 互联网科技公司经营范围 中关村互联网科技集团 重生之互联网科技帝国 深圳恒合互联网络科技有限公司 科技互联网项目 上海互联网科技有限公司 易互联网科技有限公司 狮子座互联网科技 睿民互联网科技 互联网 新科技 深圳卡尔迅互联网科技有限公司怎么样 互联网汽车科技小镇 北京大学互联网科技怎么样 湖南诚度互联网科技有限公司 福建科技产业互联网发展 晓花互联网科技有限公司网址 西安小鹰速贷互联网科技有限公司 合肥互联网科技公司公章图片 锡山区互联网智能科技产品供应 互联网加科技 中关村互联网科技集团 科技互联网技术 无线互联网科技 玖二柒互联网科技公司待遇 深圳无忧互联网科技 从那以后互联网科技有限公司 九思连强互联网电子科技有限公司 科技和互联网行业的特点 东风日产互联网科技公司叫什么
0