zoukankan      html  css  js  c++  java
  • MySql存储过程的使用

    MySql存储过程跟sql server 有一定的区别,使用说明和步骤如下

    使用说明

    创建存储过程

    MySQL中,创建存储过程的基本形式如下:

    CREATE PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body
    其中,sp_name参数是存储过程的名称;proc_parameter表示存储过程的参数列表; characteristic参数指定存储过程的特性;routine_body参数是SQL代码的内容,可以用BEGIN…END来标志SQL代码的开始和结束。

    proc_parameter中的每个参数由3部分组成。这3部分分别是输入输出类型、参数名称和参数类型。其形式如下:

    [ IN | OUT | INOUT ] param_name type

    其中,IN表示输入参数;OUT表示输出参数; INOUT表示既可以是输入,也可以是输出; param_name参数是存储过程的参数名称;type参数指定存储过程的参数类型,该类型可以是MySQL数据库的任意数据类型。

    characteristic参数有多个取值。其取值说明如下:

    LANGUAGE SQL:说明routine_body部分是由SQL语言的语句组成,这也是数据库系统默认的语言。

    [NOT] DETERMINISTIC:指明存储过程的执行结果是否是确定的。DETERMINISTIC表示结果是确定的。每次执行存储过程时,相同的输入会得到相同的输出。NOT DETERMINISTIC表示结果是非确定的,相同的输入可能得到不同的输出。默认情况下,结果是非确定的。

    { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }:指明子程序使用SQL语句的限制。CONTAINS SQL表示子程序包含SQL语句,但不包含读或写数据的语句;NO SQL表示子程序中不包含SQL语句;READS SQL DATA表示子程序中包含读数据的语句;MODIFIES SQL DATA表示子程序中包含写数据的语句。默认情况下,系统会指定为CONTAINS SQL。

    SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行。DEFINER表示只有定义者自己才能够执行;INVOKER表示调用者可以执行。默认情况下,系统指定的权限是DEFINER。

    COMMENT 'string':注释信息。

    技巧:创建存储过程时,系统默认指定CONTAINS SQL,表示存储过程中使用了SQL语句。但是,如果存储过程中没有使用SQL语句,最好设置为NO SQL。而且,存储过程中最好在COMMENT部分对存储过程进行简单的注释,以便以后在阅读存储过程的代码时更加方便。

    使用步骤

    1,先建一个表 并插入一条数据

    DROP TABLE IF EXISTS `Users`;
    CREATE TABLE `Users` ( `userId` int(11) NOT NULL AUTO_INCREMENT,
    `userName` varchar(50) DEFAULT NULL,
    `userPassWord` varchar(50) DEFAULT NULL,
    `sex` bit(1) DEFAULT b'0',
    `ages` int(11) DEFAULT '0',
    `createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `IsDelete` bit(1) DEFAULT b'0',
    PRIMARY KEY (`userId`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    INSERT INTO Users VALUES ('1', '小王', '123456', '', '10', '2017-02-06 02:01:01', '');
    2,创建存储过程
    create PROCEDURE pr_getUsers (in userid int) --参数必须括号括起来,IN是代表输入参数如userid; 如果是OUT表示输出参数; INOUT表示既可以是输入
    BEGIN
    select * from Users where userId=userid;
    end
    3,执行存储过程 call pr_getUsers(1);--执行的参数必须括号括起来

    4, 删除存储过程pr_getUsers:DROP PROCEDURE IF EXISTS 

    5, 使用ALTER PROCEDURE语句可以修改存储过程的某些特征。

    语法格式为:ALTER PROCEDURE sp_name [characteristic ...]
    其中,characteristic为:
    { CONTAINS SQL | NO SQL | READS SQLDATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'
    说明:characteristic是存储过程创建时的特征,在CREATE PROCEDURE语句中已经介绍过。只要设定了其中的值,存储过程的特征就随之变化。

     

  • 相关阅读:
    BZOJ4076 : [Wf2014]Maze Reduction
    XVII Open Cup named after E.V. Pankratiev. Eastern GP, Division 1
    BZOJ4617 : [Wf2016]Spin Doctor
    BZOJ4613 : [Wf2016]Longest Rivers
    BZOJ2587 : [Ceoi2011]Team
    BZOJ4422 : [Cerc2015]Cow Confinement
    BZOJ4437 : [Cerc2015]Looping Labyrinth
    BZOJ4432 : [Cerc2015]Greenhouse Growth
    BZOJ2670 : Almost
    寻找“最好”(4)——不等约束和KKT条件
  • 原文地址:https://www.cnblogs.com/xbhp/p/6375439.html
Copyright © 2011-2022 走看看