MYSQL 存储过程 触发器
发布时间:2022-09-12 17:22:01 所属栏目:MySql教程 来源:
导读: 存储过程
mysq5.0版本开始支持存储过程,存储过程是为了完成特定功能的sql语句集mysql触发器,用户可以通过指定存储过程的名字并给定参数(需要时)来执行,类似于在数据库中存放了一个函数。
mysq5.0版本开始支持存储过程,存储过程是为了完成特定功能的sql语句集mysql触发器,用户可以通过指定存储过程的名字并给定参数(需要时)来执行,类似于在数据库中存放了一个函数。
存储过程 mysq5.0版本开始支持存储过程,存储过程是为了完成特定功能的sql语句集mysql触发器,用户可以通过指定存储过程的名字并给定参数(需要时)来执行,类似于在数据库中存放了一个函数。 创建简单的存储过程 delimiter $ //生命结束符 create procedure pro_list() BEGIN //存储过程开始 select * from stu_like; //存储过程语句,可以写多个 end $ //存储过程结束 call pro_list(); //调用存储过程 删除存储过程 drop PROCEDURE if EXISTS pro_list(存储过程名); 查找存储过程 select * from mysql.proc where db = '数据库名' and `type` = 'PROCEDURE' //查询指定数据库中所有的存储过程 SELECT * FROM information_schema.routines WHERE routine_schema='数据库名'; //同上,不过是从information_schema数据库中的ROUTINES表中查找的 SHOW PROCEDURE STATUS WHERE db='数据库名'; //同上,这个好理解一些,都是查找指定数据库中的全部存储过程 显示指定存储过程的详细信息 SHOW CREATE PROCEDURE 数据库.存储过程名; eg:show create procedure pyg.pro_list; //显示创建pyg库下名为pro_list存储过程的详细信息 带有参数的存储过程 - in:表示输入参数,存储过程内部可以对参数的值进行修改,但存储过程中修改的参数值不做改变,也就是in参数在存储过程中值可用,但是不能被修改 - out:表示输出参数,out参数在存储过程内部为null,存储过程结束后参数的变化会被保存,也就是说在存储过程中out参数的值不可用,但是可以被修改 - inout:表示输入输出参数,既可以输出参数,又可以输出参数,也就是存储过程内部可以对参数的值进行修改,并将最终值返回给调用者。 delimiter $ create PROCEDURE pro_in (in id int) begin set id = id+1; //id加1 select id; //id为2,在存储过程中参数可见 end $ set @id = 1; call pro_in(@id); select @id; //id仍为1,妹有被改变 delimiter $ create procedure pro_out(out sid int) //out输出参数 begin if(sid is not null) then sid = sid+1; //存储过程中的out参数为null,无论调用者是否传值给存储过程, select sid; //输出sid,null end $ set @id = 5; //设置一个会话变量id=5 call pro_out(@id); select @id //null,值被设置为null DELIMITER $ CREATE PROCEDURE pro_testInOut(INOUT n INT) -- INOUT: 输入输出参数 BEGIN SELECT n; //10, 查看inout变量 SET n = n+100; END $ -- 调用 SET @n=10; CALL pro_testInOut(@n); SELECT @n; //110 inout变量值已经被修改了 触发器 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行。 触发器的特性: 1、有begin end体,begin end;之间的语句可以写的简单或者复杂 2、什么条件会触发:I(增)、D(删)、U(改) 3、什么时候触发:在增删改前或者后 4、触发频率:针对每一行执行 5、触发器定义在表上,附着在表上。 创建触发器的基本语法 一个基本的触发器 delimiter $ //定界符 create TRIGGER _tri BEFORE update on user for each row //在user表每次进行update操作之前调用 BEGIN set @name = 111; //每次调用将name变量的值置为111 end $ //触发器结束 删除触发器 drop trigger XXX(触发器名) 查看所有触发器 show triggers; 查看触发器的详细信息 show create TRIGGER XXX(触发器名); 触发器中的过度变量OLD和NEW 使用方法: NEW.columnName (columnName 为相应数据表某一列名) 另外,OLD 是只读的,而 NEW 则可以在触发器中使用 SET 赋值,这样不会再次触发触发器,造成循环调用。 delimiter $ create TRIGGER _tri BEFORE update on user for each row BEGIN //old是只读的,而new是可以设置的 set new.id = old.id+1; //当执行update操作时,将更新之前数据的id加1作为update之后数据的id end $ 注:mysql中触发器中不可操作自身表 下面操作有误,不能user的触发器不能在触发器中操作user表本身,防止循环调用 delimiter $ create TRIGGER _tri BEFORE update on user for each row BEGIN update user set id=id+1 where id=1; //将自身user表id字段为1的数据id加1 end $ (编辑:应用网_常德站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐