-
2021-12-17 20:34:58
什么是存储过程
存储过程是一些sql语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程或触发器调用。
它的参数可以被传递和返回,与应用程序中的函数过程类似,存储过程可以通过名字来调用,具有输入参数和输出参数。
存储过程的优缺点
优点
(1)执行速度快——存储过程只在创建时进行编译,以后每次执行存储过程都不需要重新编译,而一般SQL语句没执行一次就需编译一次,所以使用存储过程可提高数据库的执行速度。
(2)减少网络通信量——当对数据库进行复杂操作时,(如对多个表进行insert、update、select、delete时)可将这些复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序完成就是多条SQL语句,可能要多次连接数据库,而换成存储过程只需一次连接。
(3)更强的复用性——存储过程可以重复使用,提高了可重用性,减少数据库开发人员的工作量。
(4)可维护性高——更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。
(5)安全性高,可设定只有某用户才能对指定存储过程的使用权,且存储过程比多条sql稳定,只要数据库不出现问题,基本上是不会出现什么问题的。
(6)分布式工作——应用程序和数据库的编码工作可以单独进行,减少耦合度。
缺点
(1)开发调试差:无良好的IDE开发工具,存储过程的调试比一般SQL要复杂的多。
(2)可移植性差:由于存储过程将应用程序绑定到数据库上,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。SQL是标准的,但存储过程以及控制逻辑,都是各家数据库自已的方言,不可移植到其它数据库。
(3)功能较为局限:业务扩展之后可能会发现无法继续用存储过程实现了。存储过程可能无法和许多中间件、ORM库一起使用。
(4)存储过程的计算,消耗数据库进程所在主机的CPU和内存,增大了对数据库的压力,不适合高并发场景。
(5)存储过程也是代码,但却和代码分离开了,存储在数据库里。版本控制困难,进而造成从开发,测试,到上线整个流程的复杂度增加。写JAVA代码的人和DBA通常是两波人,引来许多管理上的问题,如,数据库权限,两边人员打乒乓球。
(6)存储过程扩展修改上线没有代码方便。
使用场景
存储过程适用于处理场景固定的复杂事务,不要求并发性。互联网高并发的场景,很多数据都是分库分表的,而且要求高度可扩展,原则是对db的保护做到最大化,能减少db压力的就减少db压力,尽量把运算逻辑拉到代码里面。存储过程的优点在于封装性好,直接让db进行运算,但是缺点在于难以维护(修改业务逻辑需要DBA进行操作,而不是后端程序员修改代码),而且大大增大db压力。
https://www.zhihu.com/question/57545650
更多相关内容 -
如何保护我的存储过程代码
2021-04-06 19:05:24本文将演示保护SQL Server代码对象的最佳实践。 -
老大说不要在项目中使用存储过程
2022-02-09 15:03:12作为技术人,我不愿看到因为xxx问题而直接拒接xxx技术这种情况,该篇文章是网上多方技术人针对“存储过程到底是值不值得用”这个问题的一些见解小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL专栏目录 | 点击这里
说在前面,本文不属于教学贴,属于技术讨论贴,对
该不该在项目中使用存储过程
这个问题,我也持学习态度。本文在存储过程技术使用方面不进行赘述,需要声明的是,任何技术都是双刃剑,不能搞一刀切。
农历2022年的第一篇文章,给大家拜个年。虎年大吉,一起暴富!祝冬奥会顺利落幕,中国加油!今天南方阴雨绵绵,我在回京的高铁上。回想到年前工作分享时,提到了项目中对存储过程的使用,同事们对是否使用存储过程还是有很多看法。总结下来主要有对接难、可维护性差、数据库迁移时需重构等方面问题,总之就是不要用,拆解回应用(代码)层。
其实这些问题在使用之前我都了解,在
《阿里巴巴JAVA开发手册》
(下面我统称为手册)中也有提到,坚持使用倒不是为了显摆,而是对存储过程到底要不要用、为何而用
我还有些想不通。我对待技术选型,坚持以实际业务场景为依据,不能一刀切,在我们项目中存在15%左右的业务逻辑有强相关属性,有一定并发度,这里引入存储过程我认为并不失礼。如果揉在一起,在实际应用中连接次数会明显增高,一定程度上影响效率,当然也避免了同事们不想看到的问题。作为技术人,我不愿看到因为xxx问题而直接拒接xxx技术这种情况,该篇文章是网上多方技术人针对
存储过程到底是值不值得用
这个问题的一些见解,我挑选了一些比较高赞或有效的回答,做个分享,能耐心看完的同学,我相信你会留下自己的看法。
- 灵剑
存储过程没有版本控制,版本迭代的时候要更新很麻烦。存储过程如果和外部程序结合起来用,更新的时候很难无感升级,可能需要停服。
存储过程不利于将来分库分表。
存储过程的功能不一定够强大,业务扩展之后可能会发现无法继续用存储过程实现了。存储过程可能无法和许多中间件、ORM库一起使用。某些特殊的兼容MySQL的实现可能根本就不支持存储过程,那就更不用说了。这也不绝对,在微软的时候就有项目是反过来的,所有业务都需要用存储过程写在SQLServer里面,查询全写成视图,业务代码只允许使用视图和存储过程,
只要SELECT和EXECUTE权限就够了;
修改业务只需要登服务器改存储过程。这属于思路不同。
- 精致的喷火住
10年前刚刚毕业,上班的时候,视图、存储过程、外健,能用的都用。。。现在数据库只存数据,其他啥也不干。
- 不悟正业
这是针对互联网企业的规则。单次请求涉及数据少,数据关系简单,但是更新频率高;
工程的迭代速率高,数据关系随时可能扩展修改。
ERP开发面对的情况是经常要大批量的处理数据,表都很大,表关系也复杂,十几个表关联不是什么大不了的情况。数据处理流程长,不用存储过程只会让事情更加复杂。
ERP中对数据库请求量相比互联网企业来说是非常低的,相对不用太关心数据库压力问题,这种时候把一些操作放到数据存储过程里可以兼顾效率和开发成本。
- dl yin
存储过程依赖数据库,特别是Oracle和sqlserver的性能,阿里巴巴的数据库是分布式存储,用存储过程会出大事的。
- 有铭
因为互联网行业的剧烈变化特性,存储过程是无法适应这种天天改的需求的。就算你维持了一个和代码开发组等量齐观的dba组,存储过程的修改过程和代价还是比代码高多了。存储过程最适合的是业务比较成熟,基本无变动,而
对性能和一致性要求高的场合。对互联网这种恨不得一天变3次的玩法,不适应。
- Rex M
任何技术都要分使用场景,阿里这种互联网高并发的场景,很多数据都是分库分表的,而且要求高度可扩展,原则是对db的保护做到最大化,能减少db压力的就减少db压力,尽量把运算逻辑拉到代码里面。
存储过程的优点在于封装性好,直接让db进行运算,但是缺点在于难以维护,而且大大增大db压力。
所以开发过程中禁止使用存储过程也是阿里多年经验积累出来的。
- 冯若航
因为这里数据库特指MySQL。这种一刀切的回答当然必须得考量上下文:一来MySQL的存储过程跟PostgreSQL, Oracle, MSSQL一比就是个笑话。二来存储过程对于
糙猛快、变化多
的典型互联网场景也比较鸡肋。维护性与难调试的问题说到底是开发人员的知识与水平不足,如果你自己清楚知道怎么用和为什么要用存储过程,那特么为什么不用?尽信书不如无书啊。
对于一些领域模型相当稳定的场景,存储过程其实是非常好的一个选择。
很多时候用存储过程一次就能解决原来业务要几次RT访问才能搞定的事情
,聚合Join处理一些常用的结果。另外数仓里搞OLAP写的UDF说到底不也是存储过程嘛。很多场景下合理利用数据库的编程能力可以极大的提高开发效率与运行效率。
- 冯若航(续)
上面是一年前的答案了。说起来,阿里一堆规矩实在是不爽。上个月干脆跳出去专职干DBA了。
去了个新公司,用的PostgreSQL,数据库用的溜到飞起。后端10万行Go代码,却配着8万行SQL,80%的业务逻辑放在数据库。十几组数据库,一两千个存储过程,目前使用64组分片,加上林林总总小数据库总共约两百台,高峰期单机50kTPS。撑起了700万日活的应用。
至少有这么几个优点:
- 性能:
存储过程消除不必要的网络IO,所有事务型请求时延控制在1ms内,极大地提高了系统性能。
- 可扩展性:
扩容通过传统的分库分表方式进行。只要fork一份老库的schema并rebalance数据,即可完成扩容。
- 灵活性:
存储过程在在数据库和后端应用之间提供了一个额外的接口层,当底层数据库发生模式变更时,可以对上层应用保持透明;提供了巨大的灵活性,并降低了系统复杂性。
- 可管理性:
大多数上线、更新、降级,是通过执行SQL完成的;服务降级的时候,只需要把存储过程替代为空函数即可。函数的调用频次,执行时间都可以直接从系统视图中获取。
- 甚至连推荐这种半事务半分析的功能也放在从库里用存储过程实现,在10~100ms内响应。
事实证明存储过程在扩展性上是没有什么问题的。同时在灵活性、可管理性上也有突出的优势。移植性在我看来是个伪命题,绝大多数的产品,终其生命周期数据量都很难超出关系型数据库的支持范畴。如果存在这种可能,那么选型的时候就该考虑好。
调试更是无稽之谈,敢在数据库里跑的逻辑,哪一个不是开发和DBA重重审阅,就差形式化证明了。
在我看来,《手册》提到存储过程的问题,没有移植性根本就不算个理由。存储过程的真正问题,既不是难以调试,也不是难以扩展,唯一的致命问题是:太TM难招人了。
团队素质是使用存储过程唯一的命门。这种开发模式对DBA、后端开发、架构提出了极高的要求,只有精英小团队适用,或者真的是非常小的项目。泛用存储过程需要后端程序员对数据库有很深入的理解,对DBA的要求更为苛刻。很显然,这种人也不需要再去看《阿里巴巴Java开发手册》了……就是这个故事。
- 孤尽[《阿里巴巴JAVA开发手册》主要作者]
解释一下这个事情:曾经写过近1200行的存储过程,没有办法断点,下层数据结构只是稍微变动,根本无法找到出错点,只是提示一下说:ERROR:1064啥的。在数据库迁移的时候,由于数据库版本变更,居然存储过程无法执行。另外,业务上需要扩展一下,那就是灾难性的啊。
没想到,我觉得毫无争议的这一条,反而成了一个最大的争议点。存储过程只是单机时代的产物,并不适合互联网时代。
- 阿里云云栖号
任何软件开发语言都是一种“绑定”或者说“限制”,一旦使用了一种语言开发出来的应用,就会很难迁移到另一种语言。虽然并非绝对,大部分情况下如此。
回到问题本身,“Java开发手册”就注定了已经绑定在Java语言上了。但是你的应用要绑定多少中语言呢?除了“Java”之外,是否还要绑定另外一种语言,比如用来写存储过程的各种“XXSQL”?
一旦使用了存储过程,至少有三种潜在的“技术债务”是要考虑的:
- 多绑定了一种语言,因此无法容易的迁移到另一种数据库上,例如Oracle的存储过程就无法用于MySQL
- 多了一种程序语言,技术栈就提升了复杂度,对调试、测试、集成等等就会增加工作量和复杂度
- 存储过程和Java不是一种类型的语言,因此需要有专业的知识(和人员,以及人员带来的支出)来维护这部分程序最重要的是,存储过程不是面向对象的,Java和存储过程都精通的人不好找,就算有,也很贵。
- 暴疯
抛开场景谈规范都是耍流氓。
以我的经验管理超过3000张表,使用周期超过20年的库、数据库逻辑、包括外键 、强制约束、存储过程接口是完全必须合理的。
一个大库很多公司用,你指望应用层约束就是搞笑。天天说换db,我看到是 pb vb asp java 各个几年就变了,公司在不在还不一定呢。
同样的逻辑过程里写一份就好了,各种语言都能用。
大量数据分析,把数据从数据库读出去,在写回去累不累?不会调试、不会写就去多练练。过程一样可以写的很优雅,水平问题而已。
《手册》对我们Java开发人员来说是一份很值得参考的辅助性文档,我们在做技术选型时,得依据实际开发场景和条件综合考虑。通过浏览相关的资料和论坛,总的来看大家对存储过程的功能和使用价值还是认可的,学以致用,尽信书不如无书。
大致来说:
- 对于后续业务变动可能性较小、架构较稳定的项目中建议多引用该技术;
- 局部功能、单接口中数据库交互需求大,且在缓存和中间件层无法处理的部分,建议使用该技术;
- 在对业务扩展不明确、后续数据体量拿不住的项目中,不建议使用该技术;
- 在开发人员迭代快、交接较频繁的项目中不建议使用该技术;
就到这里,希望你把你的看法和遇到的遭遇分享出来,大家互相白嫖~
-
MySQL 存储过程参数
2021-01-18 19:14:57MySQL 存储过程参数MySQL存储过程参数简介在现实应用中,开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。IN- 是默认模式。在存储过程中定义IN参数...MySQL 存储过程参数
MySQL存储过程参数简介
在现实应用中,开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。
IN - 是默认模式。在存储过程中定义IN参数时,调用程序必须将参数传递给存储过程。 另外,IN参数的值被保护。这意味着即使在存储过程中更改了IN参数的值,在存储过程结束后仍保留其原始值。换句话说,存储过程只使用IN参数的副本。
OUT - 可以在存储过程中更改OUT参数的值,并将其更改后新值传递回调用程序。请注意,存储过程在启动时无法访问OUT参数的初始值。
INOUT - INOUT参数是IN和OUT参数的组合。这意味着调用程序可以传递参数,并且存储过程可以修改INOUT参数并将新值传递回调用程序。
在存储过程中定义参数的语法如下:
MODE param_name param_type(param_size)
上面语法说明如下 -
根据存储过程中参数的目的,MODE可以是IN,OUT或INOUT。
param_name是参数的名称。参数的名称必须遵循MySQL中列名的命名规则。
在参数名之后是它的数据类型和大小。和变量一样,参数的数据类型可以是任何有效的MySQL数据类型。
如果存储过程有多个参数,则每个参数由逗号(,)分隔。
MySQL存储过程参数示例
1.IN参数示例
以下示例说明如何使用 ClassInfoProcedure 存储过程中的IN参数来查询选择相应的课程信息。
usetest;DROP PROCEDURE IF EXISTS ClassInfoProcedure; --注意存储名不加引号。
DELIMITER $$usetest$$CREATE PROCEDURE ClassInfoProcedure(IN id INT)BEGIN
SELECT * FROM classInfo WHERE ids =id;END$$
DELIMITER ;--注意这里的 ';' 前要留空格。
id是存储过程的IN参数。在存储过程中,我们查询id参数对应的课程信息。
假设我们想要查询id 对应的课程,我们只需要将一个值(id)传递给存储过程,如下所示:
CALL ClassInfoProcedure(3);
执行上面查询语句,得到以下结果
2.OUT参数示例
以下存储过程通过订单状态返回订单数量。它有两个参数:
orderStatus:IN参数,它是要对订单计数的订单状态。
total:存储指定订单状态的订单数量的OUT参数。
以下是CountOrderByStatus存储过程的源代码。
usetest;DROP PROCEDURE IF EXISTSCountOrderByStatus;
DELIMITER $$usetest$$CREATE PROCEDURE CountOrderByStatus(IN orderStatus VARCHAR(25),
OUT orderCountINT)BEGIN
SELECT count(sid) INTO orderCount FROM orderinfo WHERE order_status =orderStatus;END$$
DELIMITER ;
执行
查看客户端如下
要获取发货订单的数量,我们调用CountOrderByStatus存储过程,并将订单状态传递为已收货’50’,并传递参数(
CALL CountOrderByStatus('50',@total);SELECT @total;
执行上面查询语句后,得到以下结果
注意:因为上面定义了两个参数,所以调用是也要如上 传递两个参数,如果传递一个参数,会提示如下错误。
INOUT参数示例
以下示例演示如何在存储过程中使用INOUT参数。如下查询语句
DELIMITER $$CREATE PROCEDURE set_counter(INOUT count INT(4),IN inc INT(4))BEGIN
SET count = count +inc;END$$
DELIMITER ;
上面查询语句是如何运行的?
set_counter存储过程接受一个INOUT参数(count)和一个IN参数(inc)。
在存储过程中,通过inc参数的值增加计数器(count)。
下面来看看如何调用set_counter存储过程:
SET @counter = 1;
CALL set_counter(@counter,1); --2
SELECT @counter; --2
CALL set_counter(@counter,5); --7
SELECT @counter; --7
-
存储过程-数据库习题
2021-11-29 22:26:41创建存储过程的命令是( )。(多选) A. create proc B. create function C. create procedure D. create view 正确答案: AC 创建存储过程create procedure,可以简写为create proc 修改用户自定义存储过程的...创建存储过程的命令是( )。(多选)
A. create proc
B. create function
C. create procedure
D. create view
正确答案: AC创建存储过程create procedure,可以简写为create proc
修改用户自定义存储过程的命令是( )。
A. alter table
B. alter proc
C. alter function
D. alter view
正确答案: B创建create,修改alter,删除drop,后面加第二个关键字表示操作哪个数据库对象,procedure(简写proc)是存储过程,函数function,表table,视图view。
删除存储过程的命令是( )。
A. drop view
B. drop function
C. drop databese
D. drop procedure
正确答案: D创建create,修改alter,删除drop,后面加第二个关键字表示操作哪个数据库对象,procedure(简写proc)是存储过程,函数function,表 table,视图view。
为使程序员编程时既可使用数据库语言又可使用常规的程序设计语言,数据库系统需要把数据库语言嵌入到( )中。
A. 编译程序
B. 操作系统
C. 中间语言
D. 宿主语言
正确答案: DSQL语言既是独立语言也是嵌入式语言。可以以同一种语法嵌入在高级语言中使用。嵌入和SQL的高级语言称为宿主语言。
SQL语言具有两种使用方式,分别称为交互式SQL和( )。
A. 提示式SQL
B. 多用户SQL
C. 嵌入式SQL
D. 解释式SQL
正确答案: CSQL语言既是独立语言也是嵌入式语言。可以以同一种语法嵌入在高级语言中使用。
数据库应用系统通常会提供开发接口,若处于安全考虑,对于只读数据,通常提供( )供外部程序访问。
A. 基本表
B. 视图
C. 索引
D. 触发器
正确答案: B以“视图”为用户提供一种外模式,只授以必要的权限。
数据库应用系统通常会提供开发接口,对于需要更新的数据,则以( )的方式供外部调用,并由提供者完成对系统中表的更新。
A. 基本表
B. 存储过程
C. 视图
D. 触发器
正确答案: B对数据的增删改操作都通过存储过程实现,使用者通过参数调用存储过程,这样有助于保护数据库安全。
参数化存储过程有助于保护程序不受SQL注入式攻击。( )
A. 正确
B. 错误
正确答案: A在存储过程中不可以调用存储过程。 ( )
A. 正确
B. 错误
正确答案: B存储过程可以调用系统存储过程,也可以调用自定义的其他存储过程
用户自定义存储过程是指由用户创建的,能完成某一特定功能的可重用代码的模块或例程。( )
A. 正确
B. 错误
正确答案: A存储过程独立于应用程序源代码,而且可以单独修改,可以提高应用程序的可维护性。 ( )
A. 正确
B. 错误
正确答案: A存储过程以输入参数和输出参数做接口与应用程序源代码联系,内部代码可以独立修改
存储过程必须有参数。 ( )
A. 正确
B. 错误
正确答案: B存储过程的输入参数和输出参数都可以是0~n个,可以没有,也可以多个。
存储过程的输出参数可以在任意位置定义,可以写在输入参数的前面( )。
A. 正确
B. 错误
正确答案: B存储过程的输出参数必须写在所有输入参数之后
存储过程的输出参数有且只能有一个。 ( )
A. 正确
B. 错误
正确答案: B存储过程的输入参数和输出参数都可以是0~n个,可以没有,也可以多个。
-
MySQL存储过程
2017-06-20 11:45:22存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来... -
MySQL——存储过程详解及实例分析
2019-05-11 16:27:491、什么是存储过程 2、存储过程优缺点 3、存储过程入门程序 4、在idea中如何调用储存过程? 二、存储过程编程 1、存储过程的变量 2、存储过程中的参数 3、选择结构if 4、分支结构case 5、3个循环结构 6、... -
Sql Server的存储过程详解
2020-10-10 08:51:12Sql Server的存储过程详解 1 存储过程概述 1.1 存储过程的概念 存储过程(Stored Procedure)是预编译SQL语句集合,这些语句存储在一个名称(存储过程的名称)下并作为单元来处理。存储过程代替了传统的逐条执行SQL... -
MySQL中的存储过程、游标和存储函数
2018-12-18 23:49:23MySQL中的存储过程 首先来看两个问题: 1.什么是存储过程? 存储过程(Stored Procedure)是在数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数... -
SQL SERVER2008存储过程加密与解密
2019-06-01 15:59:25我们在设置数据库存储过程时经常会用到加密,如果遇到版本更新需要修改存储过程时,如果设计数据库时的存储过程没有留存,所以就必须用到存储过程的解密了,原来自己有个解密存储过程在SQL2000下应用无问题,后来... -
关系数据库——视图/存储过程/触发器
2019-12-02 09:51:43视图 视图是虚拟的表,与包含数据的表不同,视图只包含... 保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。 注意: ... -
操作系统之存储管理:分页存储管理&地址变换【全面代码&原理解释】
2021-06-12 22:24:26掌握分页存储管理的基本原理及分页存储管理中的地址变换过程,编制一个模拟地址变换过程的程序并能采用先进先出页面置换算法实现页面置换。 二、实验内容 1、复习分页存储管理的基本概念、基本原理、及地址变换过程... -
Oracle创建INSERT存储过程并调用
2018-12-19 23:34:06初学数据库,对存储过程一头雾水,上午学习创建简单的数据表,由于运维需要用到数据库存储,之前生产数据库定时存储过程一直失效,于是想自己写一个存储过程,测试下定时存储任务,后续打算用crontab来定时调用存储... -
什么时候用存储过程合适
2018-01-19 11:42:45当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;还有就是比较复杂的统计和... -
mysql存储过程之参数(IN,OUT或INOUT)了解下
2018-07-09 11:52:17在现实应用中,开发的存储过程几乎都需要参数,就是这些参数,使得存储过程更加灵活和有用。 在mysql中,参数有三种模式:IN,OUT或INOUT:IN - 是默认模式。在存储过程中定义IN参数时,调用程序必须将参数传递给... -
Informix存储过程 详解
2016-12-26 13:57:00存储过程是一个用户定义的函数,由存储过程语句(SPL) 和一组SQL语句组成,以可以执行代码形式存储在数据库中,和表、视图、索引等一样 ,是数据库的一种对象。 存储过程语言SPL(Stored Procedure Language),... -
存储过程与用户自定义函数(SQL SERVER)
2015-10-08 21:51:34二者本质上没有什么区别。当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。 -
SQL Server中视图,存储过程,注入
2020-03-14 11:11:38是存储在服务器端的一个查询块,是一张虚拟表 表示一张表的部分数据或多张表的综合数据 其结构和数据是建立在对表的查询基础上 视图的使用,跟普通数据表的查询使用完全一样 视图的数据 数据存放在视图所引用的原始... -
Java常见面试题汇总-----------数据库(数据库锁、数据库存储过程)
2019-05-12 16:24:09锁是一种并发控制技术,锁是用来在多个用户同时访问同一个数据的时候保护数据的。 57.1、有 2 种基本的锁类型 共享(S)锁: 多个事务可封锁一个共享页;任何事务都不能修改该页;通常是该页被读取完毕,S锁... -
sqlserver2008—存储过程
2015-01-11 17:02:49--存储过程 1.什么叫存储过程 2.存储过程怎么用 3.存储过程什么时候用 4.存储过程的优缺点 --存储过程:一组为了完成特定功能的SQL语句集,经过编译后存储在数据库中(一种sql语句和流程控制语句的集合... -
研发体系核心代码和文档安全保护方案
2021-01-22 15:47:01最近调研了一下研发资产安全保护方案,简单地说就是,如何避免开发人员把核心代码和核心资料据为己有,离职时偷偷带走!网上有好多人认为这个东西没有必要做,或者根本不能根本杜绝。认为现在的软件产品拼的是业务和... -
mysql存储过程 | 学习整理
2020-07-28 23:14:55存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 MySQL 5.0 版本开始支持存储过程。 类似开发语言中的函数,方法。 2、为什么是用它?直接sql语句不香吗? 前面说了,存储过程就像开发语言中的... -
SQL Server 存储过程
2016-07-21 23:18:22• 存储过程的定义以及何时需要使用一个存储过程 • 如何创建、修改和删除存储过程 • 传递输入和输出参数的方式 • 错误处理 • 性能考虑事项 • 如何使用调试器 存储过程很有用。如果您一直使用的是过程... -
什么时候用存储过程---存储过程好处
2014-06-11 11:01:49存储过程一般用于处理比较复杂的任务,基础ms这个平台,可以大大降低耗时,其编译机制也提高了数据库执行速度。 当然在系统控制方便方面,例如当系统进行调整时,这是只需要将后台存储过程进行更改,而不需要更改... -
分析存储过程的使用场景及其优缺点
2016-09-29 23:11:20分析存储过程的使用场景 当 一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对 多个状态的判断更改等)要考虑... -
什么时候使用存储过程比较适合?
2015-01-18 09:39:08存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)... -
端游代码保护:从原生代码到游戏引擎
2020-12-07 10:03:20方法加密前,代码逻辑清晰可见: 方法加密后,指令已被抽离,逻辑不再可见: 3)Mono DLL格式私有化 用一种私有化的文件格式存储加固前DLL中的关键加密信息,即使是游戏运行过程中,DLL也不会恢复。 4)IL2CPP ... -
VBA 工程代码加密混淆器,保护你的宏作品
2019-01-02 08:36:25个人制作的 VBA 代码加密混淆器,帮你加密你的宏代码,让它不再那么易读。因 VBA 的方便一直以来都喜欢用它写一些小工具,了解多了也就知道这种代码编写的工具完全没有安全性可言,工程密码形同虚设,很容易破解... -
[网络安全自学篇] 八十七.恶意代码检测技术详解及总结
2020-07-16 12:03:44这是作者网络安全自学教程...这篇文章将详细总结恶意代码检测技术,包括恶意代码检测的对象和策略、特征值检测技术、校验和检测技术、启发式扫描技术、虚拟机检测技术和主动防御技术。基础性文章,希望对您有所帮助~