`

mysql-存储过程

阅读更多

参考地址:http://blog.csdn.net/caiwenfeng_for_23/article/details/8470910

 

一. 存储过程简介

我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

存储过程通常有以下优点:

(1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

(3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。

(5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

 

二、关于MySQL的存储过程

存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

 

三、测试表结够和数据

   1、表结构

CREATE TABLE `t_user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(32) NOT NULL,
  `sex` VARCHAR(2) NOT NULL,
  `age` INT(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MYISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

 

   2、测试数据

insert into `t_user` (`id`, `name`, `sex`, `age`) values('1','熊xx','男','29');
insert into `t_user` (`id`, `name`, `sex`, `age`) values('2','熊xxx','男','28');

 

四、 存储过程格式

DELIMITER //  
CREATE PROCEDURE proc2(OUT s INT)  
BEGIN 
SELECT COUNT(*) INTO s FROM t_user;  
END;
//

    1、说明:

        这里需要注意的是DELIMITER //和DELIMITER;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

        存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。

        过程体的开始与结束使用BEGIN与END进行标识。

这样,我们的一个MySQL存储过程就完成了,是不是很容易呢?看不懂也没关系,接下来,我们详细的讲解。

     2、声明分割符

        其实,关于声明分割符,上面的注解已经写得很清楚,不需要多说,只是稍微要注意一点的是:如果是用MySQL的Administrator管理工具时,可以直接创建,不再需要声明。

    3、参数

        MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:

        CREATE PROCEDURE([[IN |OUT |INOUT ]参数名数据类形...])

        IN输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

        OUT输出参数:该值可在存储过程内部被改变,并可返回

        INOUT输入输出参数:调用时指定,并且可被改变和返回

 

 

    五、创建带输入参数和输出参数的存储过程

DELIMITER //  
CREATE PROCEDURE sp_add(a INT, b INT,OUT c INT)
BEGIN
 SET c=a+ b;
END;
//

   1、调用存储过程

CALL sp_add (1,2,@a);
SELECT @a;

    2、结果


 

  • 大小: 5.9 KB
  • 大小: 6.2 KB
分享到:
评论

相关推荐

    mysql-存储过程do-while实现循环

    mysql-存储过程do-while实现循环,通过do while 实现循环,处理业务数据。

    mysql-8.0.20-el7-x86_64.tar.gz mysql-8.0.20安装包下载

    本文将详细介绍MySQL 8.0.20的安装过程,该版本适用于Linux发行版中的EL7(Enterprise Linux 7,如CentOS 7)。提供的压缩包文件名为`mysql-8.0.20-el7-x86_64.tar.gz`,这是一个针对64位系统的tar归档文件,包含了...

    mysql-connector-java-8.0.13.jar

    除了基本的数据库连接,MySQL Connector/J还提供了丰富的功能,如预编译的Statement对象(PreparedStatement)以防止SQL注入,以及CallableStatement用于调用存储过程。此外,还有事务处理、批处理操作、结果集的...

    mysql-5.5.28资源文件(mysql-5.5.28-win32.msi)

    5. **安装步骤**:首先,双击`mysql-5.5.28-win32.msi`开始安装过程,按照向导提示进行配置。然后,选择安装类型,如选择“Developer Machine”用于个人开发,或“Server Machine”用于多用户环境。接着,设定服务...

    mysql-server-mysql-5.7.36.tar.gz

    MySQL是世界上最受欢迎的开源数据库系统之一,主要用于存储和管理数据。`mysql-server-mysql-5.7.36.tar.gz` 是MySQL服务器的一个特定版本,版本号为5.7.36,它以tar.gz格式打包,这是一种在Linux和Unix-like操作...

    mysql-connector-java-5.1.34.jar

    它支持MySQL 5.0到5.7版本的数据库服务器,提供了对InnoDB事务、存储过程、预编译语句、连接池等功能的支持。版本号34意味着这是该系列中的第34次更新,通常包含了一些bug修复、性能优化和兼容性改进。 使用`mysql-...

    mysql-connector-java-5.1.49.tar.gz

    此外,开发者还可以使用JDBC的CallableStatement来调用存储过程,或者利用MySQL的特定特性,比如分区表,视图,触发器等。 总的来说,`mysql-connector-java-5.1.49.tar.gz`是一个对于Java开发者至关重要的组件,它...

    mysql-connector-odbc-5.1.6-win32.rar_MYSQL_mySQL ODBC_mysql ODBC

    1. 支持多种MySQL特性,如存储过程、触发器、视图等。 2. 提供了32位和64位版本,满足不同操作系统的需求。 3. 兼容MySQL服务器的多种版本,包括社区版和企业版。 4. 支持Unicode,可以处理多种语言的数据。 5. 支持...

    mysql5.x最新版本驱动 mysql-connector-java-5.1.47.rar

    - **存储过程调用**:支持执行MySQL服务器上的存储过程。 在使用`mysql-connector-java-5.1.47`时,要注意版本兼容性问题,确保驱动版本与运行的MySQL服务器版本匹配。同时,应定期更新驱动以获取最新的安全修复和...

    Go-mysql-schema-sync是一款使用Go开发跨平台的MySQL表结构自动同步工具

    4. **高性能**:基于Go语言的并发处理能力,Go-mysql-schema-sync在处理大量表结构同步时表现出优秀的性能,减少了同步过程中的等待时间。 5. **配置灵活**:用户可以通过配置文件灵活设定同步规则,比如选择特定的...

    mysql-boost-5.7.20.tar.gz

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其性能强大且功能丰富,广泛应用于网站开发、数据存储和处理等场景。Boost是一个C++库集合,提供了各种工具来增强应用程序的性能,包括线程管理、正则表达式...

    mysql-5.5.40-winx64-msi

    MySQL 5.5.40的MSI安装程序简化了在Windows上设置MySQL的过程,包括配置服务器参数、设置账户信息和启动服务。 4. **安装步骤**: - 下载“mysql-5.5.40-winx64-msi”压缩包并解压。 - 双击MSI文件启动安装向导,...

    mysql-8.0.28-winx64.zip + mysql80-community-release-el7-5.noarch

    2. 创建数据存储目录(如`C:\ProgramData\MySQL\MySQL Server 8.0`)。 3. 使用命令行或安装向导进行配置,包括设置root用户的密码、网络监听地址、端口等。 4. 启动MySQL服务(通常通过服务管理器或命令行`...

    mysql-connector-j-8.0.31

    MySQL Connector/J还支持JDBC的高级特性,如批处理、存储过程、游标、多结果集等。此外,它还支持MySQL的特性,如SSL连接、分区表、复制和负载均衡。 总结来说,"mysql-connector-j-8.0.31"是Java开发者连接MySQL...

    mysql-8.2.0-winx64-debug-test.zip

    MySQL是世界上最受欢迎的开源数据库管理系统之一,主要用于存储和管理数据。这个特定的压缩包"mysql-8.2.0-winx64-debug-test.zip"包含了MySQL的8.2.0版本,专为Windows 64位操作系统设计。下面将详细讨论MySQL 8.x...

    mysql-installer-community-8.0.26.0.msi

    1. **InnoDB引擎优化**:InnoDB作为MySQL的默认存储引擎,在8.0版本中进行了大量的优化,包括更快的插入速度、更高的并发性和更小的内存占用。 2. **窗口函数**:MySQL 8.0引入了SQL标准的窗口函数,允许用户在分组...

    mysql-connector-java-5.1.10-bin.jar包下载

    MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够方便地在MySQL数据库上执行CRUD(创建、读取、更新、删除)操作...

    mysql-connector-java-5.1.22-bin.jar

    此外,MySQL数据库还支持多种其他特性,如事务管理、存储过程、触发器、视图、索引等,这些都可以通过Java应用程序利用`mysql-connector-java`驱动进行操作。对于大型企业级应用,还可能涉及到连接池(如C3P0、...

    mysql-5.5.27-win32

    1. **InnoDB存储引擎优化**:MySQL 5.5对InnoDB存储引擎进行了显著优化,包括支持更大的行内数据存储、更高的并发性以及更快的全文索引搜索。InnoDB是MySQL的默认事务处理引擎,适用于需要ACID(原子性、一致性、...

    mysql-connector-java-5.1.40.tar

    此外,了解MySQL的基本语法和数据类型、索引、视图、触发器、存储过程等概念对于有效利用MySQL Connector/J进行开发至关重要。同时,掌握数据库设计原则,如范式理论,有助于创建高效、可扩展的数据库结构。 在实际...

Global site tag (gtag.js) - Google Analytics