常用SQL语句,看这篇就够了( 四 )

  • func_parameter: param_name type
  • 7.2.4、查看函数语法SHOW FUNCTION STATUS [LIKE 'pattern']参数说明:
    • pattern:函数名称
    示例:
    SHOW FUNCTION STATUS LIKE 'user_function';7.2.5、查看函数的定义语法SHOW CREATE FUNCTION fn_name;参数说明:
    • fn_name:自定义函数名称
    7.3、实例操作介绍7.3.1、创建一个表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参数说明: