• 技术文章 >数据库 >mysql教程

    mysql存储程序相关用法总结

    2016-06-07 15:20:50原创595

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 存储函数 存储函数将向调用者返回结果 存储函数创建实例 mysql delimiter $ //设置$为分隔符 mysql create function get_carname(car_id int) //创建函数 参数为car_id - returns varchar(100) /

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

      存储函数 存储函数将向调用者返回结果

      存储函数创建实例 mysql> delimiter $ //设置$为分隔符 mysql> create function get_carname(car_id int) //创建函数 参数为car_id -> returns varchar(100) //函数返回值 -> reads sql data -> begin -> return (select name from car_info where id = car_id); -> end$ //结束符 Query OK, 0 rows affected mysql> delimiter ; mysql> select get_carname(100); //调用函数getcarname(100); +------------------------------------------------+ | get_carname(100) | +------------------------------------------------+ | 起亚K2 2012款 两厢 1.6L AT Premium纪念版111122 | +------------------------------------------------+ 1 row in set

      存储函数查看 show function status; show create function get_carname; show function status like 'get_car%';

      存储函数删除 drop function get_carname;

      存储过程 存储过程创建实例 mysql> create procedure show_name(car_id int) -> begin -> select name from car_info where id = car_id; -> update car_info set name = '123456' where id = car_id; -> end$ 1304 - PROCEDURE show_name already exists mysql> create procedure show_carname(car_id int) -> begin -> select name from car_info where id = car_id; -> update car_info set name = '123456' where id = car_id; -> end$ Query OK, 0 rows affected mysql> call show_carname(100); -> $ +------------------------------------------------+ | name | +------------------------------------------------+ | 起亚K2 2012款 两厢 1.6L AT Premium纪念版111122 | +------------------------------------------------+ 1 row in set

      存储过程的参数类型 IN参数:调用者把IN参数传值给过程 OUT参数:过程把值赋值给OUT参数

      mysql> create procedure get_carname(in car_id int,out car_name varchar(100)) -> begin -> select name into car_name from car_info where id = car_id; -> end$ Query OK, 0 rows affected mysql> delimiter ; mysql> call get_carname(100,@car_name); Query OK, 0 rows affected mysql> select @car_name; +-----------+ | @car_name | +-----------+ | 123456 | +-----------+ 1 row in set

      存储过程特征值介绍

      LANGUAGE SQL 默认,routine_boyd由SQL组成

      [NOT]DETERMINISTIC 指明存储过程的执行结果是否是确定的,默认不确定

      CONSTAINS SQL 子程序包含SQL,但不包含读写数据的语句,默认

      NO SQL 子程序中不包含SQL语句

      READS SQL DATA 子程序中包含读数据的语句

      MODIFIES SQL DATA 子程序中包含了写数据的语句

      SQLSECURITY {DEFINER|INVOKER} 指明谁有权限执行。

      DEFINER 只有定义者自己才能够执行,默认

      INVOKER 表示调用者可以执行

      存储过程中变量的使用 变量定义:declare procedure_temp varchar(100); 变量赋值:set procedure_temp = 'hello';也可以将查询结果赋值给变量: select name into procedure_temp ;

      mysql> create procedure procedure_test() -> begin -> declare continue handler for sqlstate '23000' set @x1 = 1; -> set @x2 = 2; -> insert into web_car_brands(name) values('dazhong'); -> set @x2 = 3; -> end$ 红色部分表示mysql执行是遇到错误、异常、警告时采取的方式,目前支持continue 和exit两种方式错误类别包括:sqlwarning,not found ,sqlstate

      存储过程中流程控制语句的使用,待完善……

      存储过程中光标的使用 create procedure curser_test() -> begin -> declare count int; -> declare car_name varchar(100); -> declare cur cursor for select name from car_info where id <10; //声明光标 -> declare exit handler for not found close cur; -> -> set @x1 = 0; -> set @x2 = 0; -> -> open cur; /打开光标 -> -> repeat -> fetch cur into car_name; // fetch 光标 -> if(car_name == '凯迪拉克') -> then set @x1 = 1; -> else -> set @x2 = 1; -> end if; -> until 0 end repeat; -> close cur; //关闭光标 -> end$

      触发器 当某个数据表被INSERT、DELETE、UPDATE时,触发器将自动执行。

      触发器创建实例 mysql> delimiter $ mysql> create trigger trigger_test //触发器名称为trigger_test -> after insert on car_info for each row begin //在插入操作之后执行 -> insert into web_car_brands(name) values('dahzong'); //要执行的动作 -> end; -> $

      触发器被触发的语句如下:INSERT、DELETE、UPDATE

    [1] [2]

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Mysql数据库乱码与编码问题筛查 下一篇:将Mysql数据库文件转换为SQL server数据库文件
    千万级数据并发解决方案

    相关文章推荐

    • mysql怎么将varchar转换为int类型• mysql中for update的用法是什么• mysql-connector是什么• mysql怎么查询不为空的字段• mysql怎么删除unique key
    1/1

    PHP中文网