存储过程

存储过程与SQL语句的恩怨情仇

痴心易碎 提交于 2020-01-16 10:20:08
程序员说:存储过程还是SQL语句,这是一个问题。 江湖现在有三个流派,一个是SQL语句流的,崇尚使用SQL语句,一派是存储过程派的,崇尚用存储过程说话,还有一派是中庸派的,讲求和谐,所以也就前两派吵得厉害,中庸派的看热闹。现在SQL派的有Nhibernate为首的众多ORM助阵,最近风生水起比较得意,存储过程派也有自己的杀手秘籍,两派互不相让,争斗由来已久。 存储过程派的追求速度,所谓天下无功无坚不破,唯快不破,这也是存储过程派的人行走江湖的最大本钱。之前存储过程派的攻击SQL语句派的还有一个秘籍就是安全,不过现在都没人用连接String的动态SQL的了,这招也就失效了。 SQL语句派是资格很老的流派,但是新手居多,老资格很多投奔敌营存储过程派了。Java帮的人很多都是SQL语句派的,而存储过程派的以微软帮的居多。 不过存储过程派也有软肋,可移植性就是其一,还有一点就是可扩展性,因为一般大型的Web应用程序都是多Web服务器,然后用双数据库服务器做双机热备,其中一台开机,但是是闲置的,这里只是解决单点故障的问题,但是形成了多Web应用服务器,单数据库服务器的情况,如果所有的运算都用存储过程实现,那么会造成数据库服务器负担过重,而Web服务器负荷不足的情况,而扩展数据库服务器的话就会非常的麻烦,而且投资较大,程序也需要改,而投资Web服务器就相对便宜而且扩容更加简单。

数据库常见面试题

两盒软妹~` 提交于 2020-01-16 07:05:30
(1)表的操作 表的创建:create table 表名 (列名1 类型 约束, 列名2 类型 约束...) 表的删除:drop table 表名 表的更改:alter table 表名 add|drop 列名|约束名 插入记录:insert into 表名... value... 更新记录:update 表名 set 列名=值 where 条件 删除记录:delete from 表名 where 条件 查询记录:select 列名... from 表名 where 条件 (2)什么是数据库约束,常见的约束有哪几种? 约束可以分为:主键约束primary key、外键约束foreign key、唯一约束unique、检查约束check、空值约束not null、默认值约束default (3)主键和外键的区别? 主键在本表中是唯一的,不可为空的,外键可以重复可以为空。 外键和另一张表的主键关联,不能创建对应表中不存在的外键。 (4)什么是索引?优缺点? 对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 优缺点:优点:利用索引可以加速对数据的检索,索引是可以唯一的,创建索引允许指定单个列或者多个列 缺点:减慢了数据录入速度,同时也增加了数据库的尺寸大小 (5)order by和group by的区别? order by为排序查询、ASC升序

4、MyBatis调用存储过程执行CRUD

妖精的绣舞 提交于 2020-01-16 04:21:28
mybatis调用存储过程 mysql存储过程的输入参数名和字段名不能一样 存储过程无论输入参数是什么值,语法上都需要用map来传递该值 只要是 <transactionManager type="JDBC" /> ,则增删改都需要手工commit(提交事务) //Mysql创建存储过程 mysql > DELIMITER // mysql > create procedure queryCountByAgeWithProcedure ( IN Inage int , OUT count int ) - > BEGIN - > select count ( * ) into count from person where age = Inage ; - > END // Query OK , 0 rows affected mysql > DELIMITER ; //xxx.properties driver = com . mysql . jdbc . Driver url = jdbc : mysql : / / localhost : 3306 / mybatis ? characterEncoding = utf8 username = root password = 123456 //config.xml < ? xml version = "1.0" encoding

MySQL --- 存储过程

故事扮演 提交于 2020-01-16 02:40:23
存储过程说明:存储过程是由过程化SQL语句书写的过程,这个过程经过编译和优化后存储在数据库服务器中,因此称它为存储过程,使用时只要调用即可。使用存储过程可以实现代码的复用、提高运行效率、降低通信流量以及方便实施业务规则。 1.无参存储过程 2.修改存储过程 3.查看存储过程 4.删除存储过程 使用SQL方式删除存储过程 来源: CSDN 作者: 陳Huid 链接: https://blog.csdn.net/C_huid/article/details/103976755

oracle练习-day04

心不动则不痛 提交于 2020-01-15 22:34:06
- - - - - - - - - - - - - - - - - - - - - - - - - - - Oracle day04 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 01 .什么是PL / SQL ? 通俗理解:plsql: Procedure language sql 过程化语言 plsql是一组 sql 语句集合,在这个plsql中集合语句中可以处理复杂业务逻辑 (申明变量、条件分支、循环语句、异常处理) 优点:如果使用plsql语言,编写存储过程 函数,提供java代码调用,减少访问数据频率 缺点:对程序员要求比较高(高级程序员 或 专业DBA),存储过程 函数 移植不方便 - - 02 .PL / SQL 基本语法 declare - - 声明变量 (普通变量、常量、引用型变量、记录型变量) begin - - DML语句(逻辑语句) end ; - - 03 .普通变量和常量使用 - - 类似于java中 private String myname = "老王" ; declare myname varchar2( 30 ) : = '老王' ; begin myname : = '隔壁老王' ; select e.ename into myname from

ANSI_NULLS、QUOTED_IDENTIFIER

六月ゝ 毕业季﹏ 提交于 2020-01-15 21:36:59
数据库服务器重启后,游戏登录提示“您输入的用户名不存在,请重新注册!” 重启前特意登录过平台,基本操作都正常。这之间并没对数据库做任何修改,怀疑是应用程序服务端的问题。开启跟踪监控登录过程,只跟踪到一个过程,手动执行过程也没有报错。将问题反馈给技术: 【2014/02/18 10:17:32】[proc_VerifyUserPWEx] ADO 错误:0x80040e14,INSERT 失败,因为下列 SET 选项的设置不正确: 'ANSI_NULLS, QUOTED_IDENTIFIER'。请确保 SET 选项正确无误,可以用于 计算列上的索引视图和/或索引和/或筛选的索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。。 查看存储过程定义(右击->编写存储过程脚本为->CREATE到->新查询编辑器窗口),发现在过程的定义的前面,有SET ANSI_NULLS OFF、SET QUOTED_IDENTIFIER OFF语句。 开启跟踪,监控登录涉及代码,只看到执行proc_VerifyUserPWEx,Profiler的Error事件列(0 - OK),将TextData复制到查询窗口执行没看到错误信息。依据经验登录正常的话会调用其他相关的存储过程,此时应该是在proc_VerifyUserPWEx过程出了异常。查看proc_VerifyUserPWEx过程的定义

MySQL的存储原理和过程

五迷三道 提交于 2020-01-15 09:03:25
Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之就是一组已经写好的命令,需要使用的时候拿出来用就可以了。想要快速的了解Mysql储存过程吗,就一同看一下下文的“Mysql储存过程-原理、语法、函数详细说明”吧! 一、Mysql储存过程简介: 储存过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。存储过程通常有以下优点: 1)存储过程能实现较快的执行速度。 如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。 心得:编译优化,快! 2)存储过程允许标准组件是编程。 存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句

MySQL存储过程和存储函数

試著忘記壹切 提交于 2020-01-14 09:00:16
关于存储过程学习自 :http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言 SQL 语句在执行的时候需要要先编译,然后执行,而 存储过程( Stored Procedure )是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它 。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有 SQL 语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。 存储过程通常有以下优点: (1). 存储过程增强了 SQL 语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2). 存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的 SQL 语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3). 存储过程能实现较快的执行速度。如果某一操作包含大量的 Transaction-SQL 代码或分别被多次执行

MySQL 存储过程

老子叫甜甜 提交于 2020-01-14 01:54:36
我们常用的操作数据库语言SQL语 句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一 组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参 数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平 台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。 存储过程通常有以下优点: (1).存储过程增强了SQL语 言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程 的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次 运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction

SQL SERVER拓展存储过程

≡放荡痞女 提交于 2020-01-14 01:44:23
一直都是C#调用数据库的对象,这里介绍的拓展存储过程可以在DB中调用C#的dll并且返回到DB一些信息(表或者字符串) C#代码如下,主要用以返回一个路径下面的文件,用以测试 下面只是为了创建一个类库,从而产生一个dll,所以操作如下: using Microsoft.SqlServer.Server; using System; using System.Collections; using System.Collections.Generic; using System.Data.SqlTypes; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; public partial class UserDefinedFunctions { [SqlFunction(FillRowMethodName = "FillRow")] public static IEnumerable DirectoryList(string sRootDir, string sWildCard, bool bIncludeSubDirs) { ArrayList aFileArray = new