zoukankan      html  css  js  c++  java
  • MySQL存储过程之创建第一个存储过程

    1. 选择分隔符

      在开始创建工作之前,我们需要定义一个分隔符,SQL语句如为:

    mysql> DELIMITER //
    

      分隔符是你通知MySQL客户端你已完成一个sql语句的输入的字符或字符串符号,之前大多使用分号(;).由于在存储过程中,分号本身极有可能是存储过程本身的内容,基于这个原因,所以需要先定义一个其他的分隔符代替,定义完存储过程后可以通过以下语句恢复为分号:

    mysql> DELIMITER ;

    2. 创建程序实例  

    CREATE PROCEDURE p1() SELECT * FROM t;

      1) CREATE PROCEDURE:表示创建存储过程的命令

      2) p1:存储过程的名字  

      说明:存储过程命名不区分大小写,同一数据库内的存储过程命名不能重复(否则会导致重载,某些DBMS允许重载,如Oracle,但MySQL不允许).存储过程名可以分开,可以包括空格,长度限制64个字符,但不能使用MySQL的内建函数名.

      3) ():括号里是参数列表,可以没有参数,但括号必需!

      4) SELECT * FROM t;:存储过程的执行内容,此处只有一句代码.这是存储过程的主体,是一般的sql语句,除非语句后是结束符号,否则分号是必须的.

    3. 可出现在存储过程体中的合法sql语句 

      一个存储过程体中可以包含,INSERT, UPDATE, DELETE, SELECT, DROP, CREATE, REPLACE 等等sql语句,但要注意的是如果代码中包含MySQL的扩充功能,则代码将不能移植.

    # 标准sql语句中,任何数据库操纵语言都是合法的:
    CREATE PROCEDURE P() DELETE FROM t;
    # SET COMMIT及ROLLBACK也是合法的:
    CREATE PROCEDURE P() SET @x=5;
    # MySQL的附加功能:任何数据定义语言的命令也是合法的:
    CREATE PROCEDURE P() DROP TABLE t;
    # MySQL扩充功能:直接的SELECT也是合法的:
    CREATE PROCEDURE P() SELECT 'a';

      之所以将存储过程中包括DDL语句的功能称为MySQL附加功能的原因是在sql标准中将这个定义为非核心的,即可选组件.

      在过程体中有一个约束,就是不能有对全程或表操作的数据库操作语句,如:

    CREATE PROCEDURE p1 ()    
        CREATE PROCEDURE p2 () DELETE FROM t; 

      以下语句对MySQL5.0来说都是全新的,不能出现在存储过程中:CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, CREATE FUNCTION,DROP FUNCTION, CREATE TRIGGER, DROP TRIGGER. 不过你可以使用  "CREATE PROCEDURE db5.p1 () DROP DATABASE db5;",但是类似 "USE database" 语句也是非法的,因为MySQL假定默认数据库就是过程的工作场所。

     4. 调用存储过程

      1) 要调用一个存储过程,只要输入CALL跟一个存储过程的名字及一个括号:

    CREATE PROCEDURE p1() SELECT * FROM t;
    # ... ...
    mysql> CALL p1()// #此处不是分号,原因见上

      上述代码执行后屏幕返回t表的所有字段的所有记录.

      2) 其他实现方式:

      以下语句的执行效果相同:

    mysql> CALL p1() // 
    # ... ... mysql
    > SELECT * FROM t; //

      所以调用存储过程和直接执行里面的sql指令是一样的.

  • 相关阅读:
    Grails入门教程(二)
    为脚本语言平反JavaScript篇(2)
    【CEO来信】李开复:创新工场我的新公司
    api测试常用测试点
    04 jmeter线程介绍及脚本编写
    02 改变jmeter工具GUI永久使用中文方法
    Mac配置hosts文件
    03 GUI界面的错误日志查看及清除
    页面存在多个url,使用jmeter进行遍历操作
    2.0数据之独立存储(Isolated Storage)
  • 原文地址:https://www.cnblogs.com/free-coder/p/4773691.html
Copyright © 2011-2022 走看看