SHOW FUNCTION STATUS [LIKE 'pattern']参数说明:- pattern:函数名称
SHOW FUNCTION STATUS LIKE 'user_function';7.2.5、查看函数的定义语法SHOW CREATE FUNCTION fn_name;参数说明:- fn_name:自定义函数名称
CREATE TABLE `t_user` (`user_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '用户id,作为主键',`user_name` varchar(5) DEFAULT NULL COMMENT '用户名',`age` int(3) DEFAULT NULL COMMENT '年龄',PRIMARY KEY (`user_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;7.3.2、插入数据INSERT INTO t_user (user_name, age)VALUES('张三',24),('李四',25),('王五',26),('赵六',27);7.3.3、创建函数-- 创建一个函数DELIMITER $$-- 开始创建函数CREATE FUNCTION user_function(v_id INT)RETURNS VARCHAR(50)READS SQL DATADETERMINISTICBEGIN-- 定义变量DECLARE userName VARCHAR(50);-- 给定义的变量赋值SELECT user_name INTO userName FROM t_userWHERE user_id = v_id;-- 返回函数处理结果RETURN userName;END;-- 函数创建定界符DELIMITER ;7.3.4、调用函数//查询用户ID为1的信息SELECT user_function(1);7.3.5、删除函数DROP FUNCTIONIF EXISTSuser_function;八、存储过程8.1、创建语法CREATE PROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形...])过程与创建函数类似,其中的声明语句结束符,可以自定义:DELIMITER $$或DELIMITER //参数说明:- IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
- OUT 输出参数:该值可在存储过程内部被改变,并可返回
- INOUT 输入输出参数:调用时指定,并且可被改变和返回
DELIMITER $$CREATE PROCEDURE user_procedure(IN v_id int,OUT userName varchar(255))BEGINSELECT user_name as userName FROM t_user WHERE user_id = v_id;END $$ DELIMITER ;8.2、存储过程调用-- @out为输出参数CALL user_procedure(1, @out);输出结果:张三8.3、存储过程删除DROP PROCEDURE [IF EXISTS]proc_name;删除示例:DROP PROCEDURE IF EXISTSuser_procedure;8.4、存储过程和函数的区别- 函数只能通过return语句返回单个值或者表对象 。而存储过程不允许执行return,但是通过out参数返回多个值 。
- 函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行 。
- 函数限制比较多,比如不能用临时表,只能用表变量,还有一些函数都不可用等等,而存储过程的限制相对就比较少
- 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强 。
- 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译 。
9.1、创建触发器定义语法
CREATE[DEFINER = { user | CURRENT_USER }]TRIGGER trigger_nametrigger_time trigger_eventON tbl_name FOR EACH ROW[trigger_order]trigger_bodytrigger_time: { BEFORE | AFTER }trigger_event: { INSERT | UPDATE | DELETE }trigger_order: { FOLLOWS | PRECEDES } other_trigger_name参数说明:- FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次 。
- trigger_time:BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后 。
- tigger_event详解:
- INSERT 型触发器:插入某一行时激活触发器,可能通过INSERT、LOAD DATA、REPLACE 语句触发(LOAD DAT语句用于将一个文件装入到一个数据表中,相当与一系列的INSERT操作);
- UPDATE型触发器:更改某一行时激活触发器,可能通过UPDATE语句触发;
- DELETE型触发器:删除某一行时激活触发器,可能通过DELETE、REPLACE语句触发 。
- trigger_order:是MySQL5.7之后的一个功能,用于定义多个触发器,使用follows(尾随)或precedes(在…之先)来选择触发器执行的先后顺序 。
推荐阅读
- Linux之killall命令
- 夏日泡泡小说中的经典语句
- 使用MySQL导入数据时出现乱码的两种解决方法
- c# 8个常用的.net类库
- Mysql Innodb 引擎解决并发问题
- 什么是MySQL存储引擎?
- MySQL七种JOIN类型,终于学明白了
- MySQL崩溃-修复损坏的innodb:innodb_force_recovery
- 常用的微信营销软件有哪些
- MySQL的select流程
