mysql isodd_Mysql中的Prepared Statement与Stored Precedure学习
可以参考:
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学习相关推荐
- mysql 枚举字段,MySQL字段中的枚举是什么意思 | 学步园
MySQL字段相信大家都有一些了解,为您介绍的是MySQL字段中的枚举,希望对您学习MySQL字段方面能够有所帮助.下面学步园小编来讲解下MySQL字段中的枚举是什么意思? MySQL字段中的枚举是什 ...
- MySQL视图查询报错:Prepared statement needs to be re-prepared
From: https://www.ywnds.com/?p=12609 今天公司的项目视图查询报错,报错如:ERROR 1615 (HY000): Prepared statement needs ...
- mysql的prepared statement
写过java,rails,php等的同学都知道,mysql在执行中有一个占位符的sql,比如rails里: ModelTest.where("id = ?", 100) 但是在这个 ...
- prepared statement mysql_MySQL数据库之MySQL Prepared Statement
本文主要向大家介绍了MySQL数据库之MySQL Prepared Statement ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. Summary: in this tuto ...
- mysql语句中变量 c#_C#基础知识-您的第一个C#程序,类型和变量以及流控制语句...
mysql语句中变量 c# 建立 (Setup) LinqPad is an .NET scratchpad to quickly test your C# code snippets. The st ...
- Java后端面经-----MySQL面试中常见问题总结
MySQL面试中常见问题总结 文章目录 MySQL面试中常见问题总结 @[toc] 1. JDBC连接的过程 2. 连接池 (1). 连接池的工作原理 (2). 连接池主要参数 3. 数据库范式 (1 ...
- MySQL错误代码:MySQL Workbench中UPDATE期间的1175错误代码
本文翻译自:MySQL error code: 1175 during UPDATE in MySQL Workbench I'm trying to update the column visite ...
- PostgreSQL — Prepared Statement 预编译
目录 文章目录 目录 PREPARE 指令 EXECUTE 指令 DEALLOCATE 指令 EXPLAIN 指令 ANALYZE 指令 ERROR,0A000,"cached plan m ...
- 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...
<Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...
最新文章
- 网页 内部转发和网址输入不同
- 5G 行业专网 — 三大运营商的 5G 专网类型
- Java基础学习总结(12)——一哈希编码HashCode
- html打开新窗口设置窗口属性,HTML之:让网页中的a标签属性统一设置-如‘新窗口打开’...
- python查询MySQL写入Excel
- 【LeetCode 986】 区间列表的交集(区间交集)
- python封装介绍_谈python3的封装
- 【C语言】判断某一正整数是否为完数
- 批处理 安卓一键打包脚本快速解析
- linux内核根据skb获取目的mac地址
- php面向对象封装mysql_PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)...
- 最新隐马尔可夫模型HMM详解
- 5款内容超赞的微信小程序,每一个都是深藏!
- java微信公众号图文消息编辑器,如何使用微信公众号自带的编辑器做出简洁舒适的图文排版...
- android 5.0 n,EMUI 5.0遭泄漏 基于Android N制作!华为P9用户有福啦
- Jenkins插件Gerrit Trigger配置,实现change-merged时自动触发Jenkins工程build
- 堪萨斯大学计算机硕士,美国堪萨斯大学计算机工程研究生申请要求
- 安装ubuntu20.04无法连接wifi问题
- 单片机 switch c语言,单片机入门-C51语言switch-case语句电路应用实例
- 给edittext每行加下划线
热门文章
- Retinex图像增强
- 乡镇村委干部职工数字化办公管理小程序系统开发制作介绍
- 离散数学——命题与逻辑
- 围棋打谱软件中自动提子功能的实现,C/C++源码
- idea中输入中文变成繁体字
- 西安石油大学本科毕业论文答辩PPT模板
- web3默克尔树MerleTree白名单校验
- 2021.11.02--Estimating motorway traffic states with data fusion and physics-informed deep learning
- C# AutoCAD二次开发: 读取DWG文件将全部实体变为一个块。
- 谁都有追逐梦想的权利