mysql存储过程的优缺点,mysql存储过程 和 触发器的优缺点 问题
mysql存储过程的优缺点,mysql存储过程 和 触发器的优缺点 问题详细介绍
本文目录一览: mysql存储过程 和 触发器的优缺点 问题
触发器 是定时触发 不可以调用。
存储过程 可以用户自己确定在何时 调用
其实语法都差不多
只不过在触发器中 有些T-sql用不了
缺点是触发器的缺点,
而有点是存储过程的优点,
所以推荐使用存储过程。
mysql 存储过程总结(一)
1、存储过程定义:
存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发 人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
2、特点:
封装,复用 : 可以把某一业务SQL封装在存储过程中,需要用到 的时候直接调用即可。
可以接收参数,也可以返回数据 :再存储过程中,可以传递参数,也可以接收返回 值。
减少网络交互,效率提升 : 如果涉及到多条SQL,每执行一次都是一次网络传 输。 而如果封装在存储过程中,我们只需要网络交互一次可能就可以了。
3、基本语法
(1)创建:
(2)调用:
(3)查看:
(4)删除
注意: 在命令行中,执行创建存储过程的SQL时,需要通过关键字 delimiter 指定SQL语句的 结束符。
mysql如何创建存储过程
存储过程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。推荐课程:MySQL教程。优点(为什么要用存储过程?):①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用②批量处理:SQL+循环,减少流量,也就是“跑批”③统一接口,确保数据的安全相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。一、存储过程的创建和调用>存储过程就是具有名字的一段代码,用来完成一个特定的功能。>创建的存储过程保存在数据库的数据字典中。1、创建存储过程CREATE [DEFINER = { user | CURRENT_USER }]PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_bodyproc_parameter: [ IN | OUT | INOUT ] param_name typecharacteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }routine_body:Valid SQL routine statement[begin_label:] BEGIN[statement_list]??END [end_label]#创建数据库,备份数据表用于示例操作mysql> create database db1;mysql> use db1; mysql> create table PLAYERS as select * from TENNIS.PLAYERS;mysql> create table MATCHES as select * from TENNIS.MATCHES;示例:创建一个存储过程,删除给定球员参加的所有比赛mysql> delimiter $$#将语句的结束符号从分号;临时改为两个$$(可以是自定义)mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$Query OK, 0 rows affected (0.01 sec)mysql> delimiter ;#将语句的结束符号恢复为分号解析:默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀;在定义过程时,使用DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个$$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。二、存储过程的参数存储过程可以有0个或多个参数,用于存储过程的定义。3种参数类型:IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)1、in输入参数mysql> delimiter $$mysql> create procedure in_param(in p_in int) -> begin -> select p_in; -> set p_in=2; -> select P_in; -> end$$mysql> delimiter ;mysql> set @p_in=1;mysql> call in_param(@p_in);+------+| p_in |+------+| 1 |+------++------+| P_in |+------+| 2 |+------+mysql> select @p_in;+-------+| @p_in |+-------+| 1 |+-------+#以上可以看出,p_in在存储过程中被修改,但并不影响@p_id的值,因为前者为局部变量、后者为全局变量。2、out输出参数mysql> delimiter //mysql> create procedure out_param(out p_out int) -> begin -> select p_out; -> set p_out=2; -> select p_out; -> end -> //mysql> delimiter ;mysql> set @p_out=1;mysql> call out_param(@p_out);+-------+| p_out |+-------+| NULL |+-------+#因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的p_out为null+-------+| p_out |+-------+| 2 |+-------+mysql> select @p_out;+--------+| @p_out |+--------+| 2 |+--------+#调用了out_param存储过程,输出参数,改变了p_out变量的值3、inout输入参数mysql> delimiter $$mysql> create procedure inout_param(inout p_inout int) -> begin -> select p_inout; -> set p_inout=2; -> select p_inout; -> end -> $$mysql> delimiter ;mysql> set @p_inout=1;mysql> call inout_param(@p_inout);+---------+| p_inout |+---------+| 1 |+---------++---------+| p_inout |+---------+| 2 |+---------+mysql> select @p_inout;+----------+| @p_inout |+----------+| 2 |+----------+#调用了inout_param存储过程,接受了输入的参数,也输出参数,改变了变量注意:①如果过程没有参数,也必须在过程名后面写上小括号例:CREATE PROCEDURE sp_name ([proc_parameter[,...]]) ??②确保参数的名字不等于列的名字,否则在过程体中,参数名被当做列名来处理强烈建议:>输入值使用in参数;>返回值使用out参数;>inout参数就尽量的少用。
mysql存储过程为什么不推荐使用
维护不方便,对数据库压力不较大,不易于数据库集群的扩展和迁移。
能够在业务系统层面做的逻辑尽量不要用存储过程来做。
以后做数据库的迁移的时候,换了数据库,存储过程可能要重写或重构。但是如果放在业务代码层去实现对应的逻辑,数据库换了之后,更改对应的连接驱动,业务代码不用做任何吸怪。
mysql 存储过程 是什么意思
用select...into语句
下面是mysql 5.0的帮助文档的:
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。请参阅9.3节,“用户变量”。
重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column的:
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
存储过程通常有以下优点:
存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
MySQL存储过程创建的格式如下:
CREATE PROCEDURE 过程名 ([过程参数[,...]])[特性 ...] 过程体
举例代码如下:
CREATE PROCEDURE proc1(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM user; END存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
过程体的开始与结束使用BEGIN与END进行标识。
注意:MySQL在5.0以前并不支持存储过程
移动端开发(iOS,安卓)数据库用MySQL或是sqlserver优缺点?
不管是移动端开发,还是PC端开发,其实都有用mysql还是sqlserver这样的选择,今天就把我的观点给大家分享下:
1.Sqlserver和MySQL都是关系型数据库,在整体功能上差异不算太大,都支持表、视图、函数、存储过程。
2.就部署平台来收,sqlserver是微软出品,很显然他必须部署在windows系统上,而mysql既可以部署在windows系统上,也可以部署在linux系统上,就这点来说mysql优势更明显。
3.就使用成本来说,mysql目前开发使用费用很小,而sqlserver作为微软的产品,应用与商业的话必须购买,而且价格也不菲。因此这点上mysql仍然占据优势。
4.mysql短小精悍,学习上容易上手,操作相对简单,sqlserver作为一个大型的数据库系统,上手稍微复杂些,但有功能超强的图形界面工具进行操作。目前mysql多应用与一些网站系统,即web页面要求响应速度较快的系统中。sqlserver多应用于一些行业领域信息化系统中。
5.mysql的性能是相当出色的,但稳定性不如sqlserver好,而且sqlserver有很强大的备份恢复机制,对数据的完整性,容错性有较大的优势。sqlserver可以很方便的整库分离和附加,还有可以定制维护计划以及详细的日志信息。
因此,这两种数据库系统应该说各有优劣,可根据具体开发应用场景进行选择。
移动端开发(iOS,安卓)的话建议服务端用mysql了,部署在Linux环境,稳定性更强。
MYSQL sqlserver oracle 之间的优缺点
MySQL类似于Access,属于小型数据库,适用于小行网站、一些类似单机的财物软件等
SQL server属中大型数据库,可用于大型网站,一般用在公司内部网络的数据或小区数据等应用上
Oracle也属大型数据库,跟SQL相比,它往往用于分布式的数据管理上,比如,联网售票,联网银行等
那主要就是安全性的问题了。
虽然Oracle的安全性较高,但是好象一般网站用的少.
MySQL主要用在小型论坛类,聊天室类。
SQL server企业用的比较多。
1oracle 的优缺点
优点
大, 稳
极多的辅助工具
缺点
系统庞杂,
规矩繁多
价格昂贵
内核老旧
2.MySQL 没有这类限制. 虽然目前还有许多尚未完成(如
stored procedure 等等), 却已能经受大多最新的软件工程
的挑战. 让人联想到 微软与Linux 的对比关系.
3.1.选择一个好的数据库是非常重要的。
3.2.如何选择一个好的数据库
开放性:
SQL Server
只能在windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据量的关键业务时.
Oracle
能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。
DB2
能在所有主流平台上运行(包括windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%.
可伸缩性,并行性
SQL server
并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。
Oracle
平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。
如果windowsNT不能满足需要, 用户可以把数据库移到UNIX中。
安全性
SQL server
没有获得任何安全证书。
Oracle Server
获得最高认证级别的ISO标准认证。
性能
SQL Server
多用户时性能不佳
Oracle
性能最高, 保持windowsNT下的TPC-D和TPC-C的世界记录。
客户端支持及应用模式
SQL Server
C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB,ODBC连接.
Oracle
多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接
操作简便
SQL Server
操作简单,但只有图形界面.
Oracle
较复杂, 同时提供GUI和命令行,在windowsNT和unix下操作相同
使用风险
SQL server
完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。
Oracle
长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。
MySql数据库 :
优点: 1.支持5000万条记录的数据仓库
2.适应于所有的平台
3.是开源软件,版本更新较快
4.性能很出色。纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM数据库 与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows 系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。
5.价格便宜
缺点: 缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能
MsSqlserver数据库:
优点: 1.真正的客户机/服务器体系结构
2.图形化的用户界面,使系统管理和数据库管理更加直观、简单
3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地
4.与WinNT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等,SQL Server也可以很好地与Microsoft BackOffice产品集成。
5.有很好的伸缩性,可以跨平台使用。
6.提供数据仓库功能,这个功能只在Oracle和其他 昂贵的DBMS中才有。
Oracle数据库:
优点: 1.Oracle的稳定性要比Sql server好。
2.Oracle在导数据工具sqlload.exe功能比Sqlserver的Bcp功能强大,Oracle可以按照条件把文本文件数据导入.
3.Oracle的安全机制比Sql server好。
4.Sql server的易用性和友好性方面要比Oracle好。
5.在处理大数据方面Oracle会更稳定一些。
6.Sql Server在数据导出方面功能更强一些。
7.处理速度方面比Oracle快一些,和两者的协议有关.
缺点: 价格昂贵
mysql存储过程是什么样
相关免费学习:mysql数据库(视频)mysql存储过程是:1、什么是存储过程存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。2、创建存储过程格式:DELIMITER $$CREATE PROCEDURE `ProcedureName`(paramName paramType)BEGINEND$$DELIMITER ;红色字体解释:ProcedureName:你要创建的存储过程名称paramName:参数名称paramType:参数类型注:(1) 存储过程是否需要参数根据实际情况而定(括号内容可不填);(2) MySQL从5.0开始支持存储过程;(3) DELIMITER 和 DELIMITER ; 是分隔符的意思,它们的作用就是让编译器知道它们里面的内容是存储过程的,如果不写这两部分,则编译器会将这段代码当作普通的SQL执行;(4) BEGIN 和 END 之间就是存储过程的内容,我们的SQL都是在这中间编写;3、存储过程的优缺点(1) 执行速度快。由于存储过程已经预编译了,使用的时候直接跳过编译部分,所以执行速度会变快;(2) 减少网络流量。使用存储过程的时候只需要调用存储过程的方法即可,相对于SQL语句存储过程的方法名更短,网络传输调用存储过程的语句,减少了网络流量;(3) 复用性。一次创建,满足需求的情况下可以随便使用;
MySQL的优点?
1、它使用的核心线程是完全多线程,支持多处理器,有多种列类型:1、2、3、4、和8字节长度自有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM类型。
2、它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞。
3、全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数。可以在同一查询中混来自不同数据库的表。所有列都有缺省值,可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的决省值。
1.它使用的核心线程是完全多线程,支持多处理器。
2.有多种列类型:1、2、3、4、和8字节长度自有符号/无符号整数、FLOAT、DOUBLE、CHAR、类型。 3.它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞。
4.全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数。
拓展资料:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
MySQL数据库虽说功能不算强大,但是优点也是不少的:
使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性;
支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统;
为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等;
支持多线程,充分利用CPU资源;
优化的SQL查询算法,有效地提高查询速度;
既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中;
提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名;
提供TCP/IP、ODBC和JDBC等多种数据库连接途径;
提供用于管理、检查、优化数据库操作的管理工具;
支持大型的数据库。可以处理拥有上千万条记录的大型数据库;
支持多种存储引擎;
Mysql是开源的,所以你不需要支付额外的费用;
MySQL使用标准的SQL数据语言形式;
Mysql对PHP有很好的支持,PHP是目前的Web开发语言;
Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司,现在已经被Sun公司收购,支持FreeBSD、Linux、MAC、Windows等多种操作系统与其他的大型数据库例如Oracle、DB2、SQL Server等相比功能稍弱一些。
优点如下:
1. 它使用的核心线程是完全多线程,支持多处理器。
2. 有多种列类型:1、2、3、4、和8字节长度自有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM类型。
3. 它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞。
4. 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查询中混来自不同数据库的表。
5. 支持ANSI SQL的LEFT 0UTER JOIN和ODBC。
6. 所有列都有缺省值。你可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的决省值。
7. MySQL可以工作在不同的平台上。支持C、C++、Java、Perl、PHP、Python和TCL API。
MySQL的缺点:
1、 MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。
2、 MySQL的另一个主要的缺陷之一是缺乏标准的RI(Referential Integrity-RI)机制;Rl限制的缺乏(在给定字段域上的一种固定的范围限制)可以通过大量的数据类型来补偿。
3、 MySQL没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制。
4、 MySQL不支持热备份。
5、 MySQL的价格随平台和安装方式变化。