可以参考:

http://stackoverflow.com/questions/196652/prepared-statement-vs-stored-procedure

They are not really the same thing - with stored procedures, your database logic resides inside the database. Prepared statements basically avoid re-parsing queries if they are called multiple times - the performance benefit can vary greatly.

The choice to use one or the other is really dependent on your specific situation. I don't really use stored procs anymore as I like having all of my logic in one place.

创建存储过程

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

CREATE PROCEDURE sp_name ([proc_parameter[,...]])

[characteristic ...] routine_body

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

【示例14-1】 下面创建一个名为num_from_employee的存储过程。代码如下:

CREATE  PROCEDURE  num_from_employee (IN emp_id INT, OUT count_num INT )

READS SQL DATA

BEGIN

SELECT  COUNT(*)  INTO  count_num

FROM  employee

WHERE  d_id=emp_id ;

END

上述代码中,存储过程名称为num_from_employee;输入变量为emp_id;输出变量为count_num。SELECT语句从employee表查询d_id值等于emp_id的记录,并用COUNT(*)计算d_id值相同的记录的条数,最后将计算结果存入count_num中。代码的执行结果如下:

mysql> DELIMITER &&

mysql> CREATE  PROCEDURE  num_from_employee

(IN emp_id INT, OUT count_num INT )

-> READS SQL DATA

-> BEGIN

-> SELECT  COUNT(*)  INTO  count_num

-> FROM  employee

-> WHERE  d_id=emp_id ;

-> END &&

Query OK, 0 rows affected (0.09 sec)

mysql> DELIMITER ;

代码执行完毕后,没有报出任何出错信息就表示存储函数已经创建成功。以后就可以调用这个存储过程,数据库中会执行存储过程中的SQL语句。

#执行存储过程

CALL Pro_Employee(101,@pcount);

SELECT @pcount;

创建存储函数

mysql> DELIMITER &&

mysql> CREATE  FUNCTION  name_from_employee (emp_id INT )

-> RETURNS VARCHAR(20)

-> BEGIN

-> RETURN  (SELECT  name

-> FROM  employee

-> WHERE  num=emp_id );

-> END&&

Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

调用方法:

//调用存储函数

mysql> SELECT name_from_employee(3);

存储过程里面也能够使用函数:

mysql> delimiter $$

mysql> CREATE FUNCTION isodd(input_number int) //创建函数

-> RETURNS int

-> BEGIN

-> DECLARE v_isodd INT;

->

-> IF MOD(input_number,2)=0 THEN

-> SET v_isodd=FALSE;

-> ELSE

-> SET v_isodd=TRUE;

-> END IF;

->

-> RETURN(v_isodd);

->

-> END$$

Query OK, 0 rows affected (0.01 sec)

mysql> CREATE PROCEDURE myProc(aNumber int) //创建mysql存储过程

-> Begin

-> IF (isodd(aNumber)) THEN

-> SELECT ' is odd';

-> ELSE

-> SELECT ' is even';

-> END IF;

-> END$$

Query OK, 0 rows affected (0.02 sec)

mysql> delimiter ;

mysql> call myProc(2); //call 调用存储过程

+----------+

| is even |

+----------+

| is even |

+----------+

1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> call myProc(1); //call 调用存储过程

+---------+

| is odd |

+---------+

| is odd |

+---------+

1 row in set (0.00 sec)

mysql> drop procedure myProc; //删除mysql存储过程

Query OK, 0 rows affected (0.00 sec)

mysql> drop function isodd; //删除mysql函数

Query OK, 0 rows affected (0.00 sec)

用完了,要记得删除。不然占用资源。

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。

存储过程和函数存在以下几个区别:

1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。

2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。

3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。

4)存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。(意思是存储过程要单独调用,一般用call来调用)

mysql常见的内置函数:

concat

pow 乘方

mod 取余

strcmp

http://php.net/manual/en/pdo.prepared-statements.php  这个网址没打开?

mysql isodd_Mysql中的Prepared Statement与Stored Precedure学习相关推荐

  1. mysql 枚举字段,MySQL字段中的枚举是什么意思 | 学步园

    MySQL字段相信大家都有一些了解,为您介绍的是MySQL字段中的枚举,希望对您学习MySQL字段方面能够有所帮助.下面学步园小编来讲解下MySQL字段中的枚举是什么意思? MySQL字段中的枚举是什 ...

  2. MySQL视图查询报错:Prepared statement needs to be re-prepared

    From: https://www.ywnds.com/?p=12609 今天公司的项目视图查询报错,报错如:ERROR 1615 (HY000): Prepared statement needs ...

  3. mysql的prepared statement

    写过java,rails,php等的同学都知道,mysql在执行中有一个占位符的sql,比如rails里: ModelTest.where("id = ?", 100) 但是在这个 ...

  4. prepared statement mysql_MySQL数据库之MySQL Prepared Statement

    本文主要向大家介绍了MySQL数据库之MySQL Prepared Statement ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. Summary: in this tuto ...

  5. mysql语句中变量 c#_C#基础知识-您的第一个C#程序,类型和变量以及流控制语句...

    mysql语句中变量 c# 建立 (Setup) LinqPad is an .NET scratchpad to quickly test your C# code snippets. The st ...

  6. Java后端面经-----MySQL面试中常见问题总结

    MySQL面试中常见问题总结 文章目录 MySQL面试中常见问题总结 @[toc] 1. JDBC连接的过程 2. 连接池 (1). 连接池的工作原理 (2). 连接池主要参数 3. 数据库范式 (1 ...

  7. MySQL错误代码:MySQL Workbench中UPDATE期间的1175错误代码

    本文翻译自:MySQL error code: 1175 during UPDATE in MySQL Workbench I'm trying to update the column visite ...

  8. PostgreSQL — Prepared Statement 预编译

    目录 文章目录 目录 PREPARE 指令 EXECUTE 指令 DEALLOCATE 指令 EXPLAIN 指令 ANALYZE 指令 ERROR,0A000,"cached plan m ...

  9. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...

    <Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...

最新文章

  1. 网页 内部转发和网址输入不同
  2. 5G 行业专网 — 三大运营商的 5G 专网类型
  3. Java基础学习总结(12)——一哈希编码HashCode
  4. html打开新窗口设置窗口属性,HTML之:让网页中的a标签属性统一设置-如‘新窗口打开’...
  5. python查询MySQL写入Excel
  6. 【LeetCode 986】 区间列表的交集(区间交集)
  7. python封装介绍_谈python3的封装
  8. 【C语言】判断某一正整数是否为完数
  9. 批处理 安卓一键打包脚本快速解析
  10. linux内核根据skb获取目的mac地址
  11. php面向对象封装mysql_PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)...
  12. 最新隐马尔可夫模型HMM详解
  13. 5款内容超赞的微信小程序,每一个都是深藏!
  14. java微信公众号图文消息编辑器,如何使用微信公众号自带的编辑器做出简洁舒适的图文排版...
  15. android 5.0 n,EMUI 5.0遭泄漏 基于Android N制作!华为P9用户有福啦
  16. Jenkins插件Gerrit Trigger配置,实现change-merged时自动触发Jenkins工程build
  17. 堪萨斯大学计算机硕士,美国堪萨斯大学计算机工程研究生申请要求
  18. 安装ubuntu20.04无法连接wifi问题
  19. 单片机 switch c语言,单片机入门-C51语言switch-case语句电路应用实例
  20. 给edittext每行加下划线

热门文章

  1. Retinex图像增强
  2. 乡镇村委干部职工数字化办公管理小程序系统开发制作介绍
  3. 离散数学——命题与逻辑
  4. 围棋打谱软件中自动提子功能的实现,C/C++源码
  5. idea中输入中文变成繁体字
  6. 西安石油大学本科毕业论文答辩PPT模板
  7. web3默克尔树MerleTree白名单校验
  8. 2021.11.02--Estimating motorway traffic states with data fusion and physics-informed deep learning
  9. C# AutoCAD二次开发: 读取DWG文件将全部实体变为一个块。
  10. 谁都有追逐梦想的权利