国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SQL高級(jí)知識(shí)——存儲(chǔ)過程

這篇具有很好參考價(jià)值的文章主要介紹了SQL高級(jí)知識(shí)——存儲(chǔ)過程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

存儲(chǔ)過程的定義

存儲(chǔ)過程其實(shí)就是已預(yù)編譯為可執(zhí)行過程的一個(gè)或多個(gè)SQL語(yǔ)句。 通過調(diào)用和傳遞參數(shù)即可完成該存儲(chǔ)過程的功能。

CREATE PROC | PROCEDURE procedure_name
[{@參數(shù)數(shù)據(jù)類型} [=默認(rèn)值] [OUTPUT],
{@參數(shù)數(shù)據(jù)類型} [=默認(rèn)值] [OUTPUT],
....
]
AS
sql_statements
GO

存儲(chǔ)過程在創(chuàng)建階段可以帶參數(shù)或不帶參數(shù),不帶參數(shù)的一般是執(zhí)行一些不需要傳遞參數(shù)的語(yǔ)句就可以完成的功能,帶參數(shù)那就是需要傳遞參數(shù)的SQL語(yǔ)句,就像上面的示例,傳遞了兩個(gè)參數(shù)給SQL語(yǔ)句。帶參數(shù)的一定要定義參數(shù)類型,是字符型的還要定義長(zhǎng)度,給參數(shù)加默認(rèn)值是可選的。

存儲(chǔ)過程的優(yōu)點(diǎn)

提高性能

SQL語(yǔ)句在創(chuàng)建過程時(shí)進(jìn)行分析和編譯。 存儲(chǔ)過程是預(yù)編譯的,在首次運(yùn)行一個(gè)存儲(chǔ)過程時(shí),查詢優(yōu)化器對(duì)其進(jìn)行分析、優(yōu)化,并給出最終被存在系統(tǒng)表中的存儲(chǔ)計(jì)劃,這樣,在執(zhí)行過程時(shí)便可節(jié)省此開銷。

降低網(wǎng)絡(luò)開銷

存儲(chǔ)過程調(diào)用時(shí)只需用提供存儲(chǔ)過程名和必要的參數(shù)信息,從而可降低網(wǎng)絡(luò)的流量。

便于進(jìn)行代碼移植

數(shù)據(jù)庫(kù)專業(yè)人員可以隨時(shí)對(duì)存儲(chǔ)過程進(jìn)行修改,但對(duì)應(yīng)用程序源代碼卻毫無影響,從而極大的提高了程序的可移植性。

更強(qiáng)的安全性

系統(tǒng)管理員可以對(duì)執(zhí)行的某一個(gè)存儲(chǔ)過程進(jìn)行權(quán)限限制,避免非授權(quán)用戶對(duì)數(shù)據(jù)的訪問在通過網(wǎng)絡(luò)調(diào)用過程時(shí),只有對(duì)執(zhí)行過程的調(diào)用是可見的。 因此,惡意用戶無法看到表和數(shù)據(jù)庫(kù)對(duì)象名稱、嵌入自己的 Transact-SQL 語(yǔ)句或搜索關(guān)鍵數(shù)據(jù)。

使用過程參數(shù)有助于避免 SQL 注入攻擊。 因?yàn)閰?shù)輸入被視作文字值而非可執(zhí)行代碼,所以,攻擊者將命令插入過程內(nèi)的 Transact-SQL 語(yǔ)句并損害安全性將更為困難。

可以對(duì)過程進(jìn)行加密,這有助于對(duì)源代碼進(jìn)行模糊處理。

存儲(chǔ)過程的缺點(diǎn)

邏輯處理吃力

SQL本身是一種結(jié)構(gòu)化查詢語(yǔ)言,但不是面向?qū)ο蟮牡?,本質(zhì)上還是過程化的語(yǔ)言,面對(duì)復(fù)雜的業(yè)務(wù)邏輯,過程化的處理會(huì)很吃力。同時(shí)SQL擅長(zhǎng)的是數(shù)據(jù)查詢而非業(yè)務(wù)邏輯的處理,如果如果把業(yè)務(wù)邏輯全放在存儲(chǔ)過程里面,違背了這一原則。

修改參數(shù)復(fù)雜

如果需要對(duì)輸入存儲(chǔ)過程的參數(shù)進(jìn)行更改,或者要更改由其返回的數(shù)據(jù),則您仍需要更新程序集中的代碼以添加參數(shù)、更新調(diào)用,等等,這時(shí)候估計(jì)會(huì)比較繁瑣了。

開發(fā)調(diào)試復(fù)雜

由于IDE的問題,存儲(chǔ)過程的開發(fā)調(diào)試要比一般程序困難。

無法應(yīng)用緩存

雖然有全局臨時(shí)表之類的方法可以做緩存,但同樣加重了數(shù)據(jù)庫(kù)的負(fù)擔(dān)。如果緩存并發(fā)嚴(yán)重,經(jīng)常要加鎖,那效率實(shí)在堪憂。

不支持群集

數(shù)據(jù)庫(kù)服務(wù)器無法水平擴(kuò)展,或者數(shù)據(jù)庫(kù)的切割(水平或垂直切割)。數(shù)據(jù)庫(kù)切割之后,存儲(chǔ)過程并不清楚數(shù)據(jù)存儲(chǔ)在哪個(gè)數(shù)據(jù)庫(kù)中。

存儲(chǔ)過程在業(yè)務(wù)量小的系統(tǒng)中應(yīng)用比較廣泛,將邏輯全部交給數(shù)據(jù)庫(kù)進(jìn)行處理,可以快速完成一些邏輯功能。但是針對(duì)業(yè)務(wù)量比較大的系統(tǒng),一般是禁止使用存儲(chǔ)過程的,因?yàn)閷?duì)數(shù)據(jù)庫(kù)的壓力太大。文章來源地址http://www.zghlxwxcb.cn/news/detail-417852.html

到了這里,關(guān)于SQL高級(jí)知識(shí)——存儲(chǔ)過程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SQL-存儲(chǔ)過程、流程控制、游標(biāo)

    開發(fā)過程總,經(jīng)常會(huì)遇到重復(fù)使用某一功能的情況 MySQL引人了存儲(chǔ)過程(Stored Procedure)這一技術(shù) 存儲(chǔ)過程就是一條或多條SQL語(yǔ)句的集合 存儲(chǔ)過程可將一系列復(fù)雜操作封裝成一個(gè)代碼塊,以便重復(fù)使用,從而減少工作量提升開發(fā)效率。 SQL語(yǔ)句需先編譯然后執(zhí)行。 存儲(chǔ)過程將為了

    2024年02月10日
    瀏覽(17)
  • 使用SQL語(yǔ)句創(chuàng)建存儲(chǔ)過程

    使用SQL語(yǔ)句創(chuàng)建存儲(chǔ)過程

    本篇文章是記錄學(xué)校學(xué)習(xí) SQL server 中知識(shí),可用于復(fù)習(xí)資料. 定義: 存儲(chǔ)過程 是為了完成特定功能的SQL語(yǔ)句集合,存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過指定 存儲(chǔ)過程 的名稱并給出參數(shù)來執(zhí)行。 優(yōu)點(diǎn): 1、方便修改。 ??因?yàn)?存儲(chǔ)過程 是存儲(chǔ)在數(shù)據(jù)庫(kù)中的,如果需要涉及到修改SQL語(yǔ)句

    2024年02月08日
    瀏覽(18)
  • SQL server 創(chuàng)建存儲(chǔ)過程

    SQL server 創(chuàng)建存儲(chǔ)過程

    ?? 存儲(chǔ)過程: 可以理解為完成特定功能的一組 SQL 語(yǔ)句集,存儲(chǔ)在數(shù)據(jù)庫(kù)中,經(jīng)過第一次編譯,之后的運(yùn)行不需要再次編譯,用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來調(diào)用存儲(chǔ)過程。 如何創(chuàng)建存儲(chǔ)過程 ??創(chuàng)建存儲(chǔ)過程可以有兩種方式:一

    2024年02月07日
    瀏覽(16)
  • [SQL挖掘機(jī)] - 存儲(chǔ)過程

    當(dāng)你在sql中需要多次執(zhí)行相同的一組sql語(yǔ)句時(shí),存儲(chǔ)過程是一個(gè)非常有用的工具。它是一段預(yù)先定義好的sql代碼塊,可以被命名并保存在數(shù)據(jù)庫(kù)中,以便重復(fù)使用。 存儲(chǔ)過程可以包含多個(gè)sql語(yǔ)句、邏輯流程、條件判斷和循環(huán)等,可以完成復(fù)雜的數(shù)據(jù)庫(kù)操作。通俗地說,存儲(chǔ)過

    2024年02月14日
    瀏覽(20)
  • SQL Server 存儲(chǔ)過程:BBS論壇(表結(jié)構(gòu)文檔下載及30個(gè)存儲(chǔ)過程)

    基于 Asp.Net 和 SQL Server 實(shí)現(xiàn)了一個(gè)BBS論壇,論壇功能比較強(qiáng)大,論壇大部分業(yè)務(wù)邏輯基于存儲(chǔ)過程實(shí)現(xiàn),記錄一下。 序號(hào) 存儲(chǔ)過程 功能說明 1 sp_bbs_admin_add 添加管理員 2 sp_bbs_admin_del 刪除系統(tǒng)管理員 3 sp_bbs_admin_modi 修改管理員密碼 4 sp_bbs_article_add 發(fā)表帖子 5 sp_bbs_article_del 刪

    2024年04月09日
    瀏覽(14)
  • MySQL 自定義 split 存儲(chǔ)過程

    ? ? ? ? MySQL 沒有提供 split 函數(shù),但可以自己建立一個(gè)存儲(chǔ)過程,將具有固定分隔符的字符串轉(zhuǎn)成多行。之所以不能使用自定義函數(shù)實(shí)現(xiàn)此功能,是因?yàn)?MySQL 的自定義函數(shù)自能返回標(biāo)量值,不能返回多行結(jié)果集。 MySQL 8: MySQL 5: 測(cè)試: 返回指定下標(biāo)的元素:

    2024年02月11日
    瀏覽(19)
  • SQL高級(jí)知識(shí)點(diǎn)

    MySQL基礎(chǔ) 1、安裝 ? ?1)設(shè)置編碼 ? ?2)設(shè)置密碼 2、配置文件:my.ini、my.cnf ? ?1)設(shè)置端口號(hào) ? ? ?port=3306 ? ?2)設(shè)置編碼 ? ?3)存儲(chǔ)引擎? ? ?4)最大連接數(shù) ? ?注意:重啟mysql服務(wù) 3、登陸mysql數(shù)據(jù)庫(kù) ? ?問題:\\\"mysql\\\"不是系統(tǒng)內(nèi)部或外部命令.... ? ?解決:將mysql的bin目錄配置到

    2024年02月10日
    瀏覽(19)
  • SQL視圖、存儲(chǔ)過程、觸發(fā)器

    視圖(view)是一種虛擬存在的表。視圖中的數(shù)據(jù)并不在數(shù)據(jù)庫(kù)中實(shí)際存在,行和列數(shù)據(jù)來自定義視圖的查詢中使用的表,并且是在使用視圖時(shí)動(dòng)態(tài)生成的。 通俗的講,視圖只保存了查詢的SQL邏輯,不保存查詢結(jié)果。所以我們?cè)趧?chuàng)建視圖的時(shí)候,主要的工作就落在創(chuàng)建這條SQL查

    2024年02月09日
    瀏覽(93)
  • SQL Server基礎(chǔ)之存儲(chǔ)過程

    ?SQL?Server中的存儲(chǔ)過程是使用T_SQL編寫的代碼段。它的目的在于能夠方便的從系統(tǒng)表中查詢信息,或者完成與更新數(shù)據(jù)庫(kù)表相關(guān)的管理任務(wù)和其他的系統(tǒng)管理任務(wù).T_SQL語(yǔ)句是SQL?Server數(shù)據(jù)庫(kù)與應(yīng)用程序之間的編程接口。在很多情況下,一些代碼會(huì)被開發(fā)者重復(fù)編寫多次,如果

    2024年02月13日
    瀏覽(20)
  • oracle 自定義存儲(chǔ)過程(非常簡(jiǎn)單明了)

    1.舉一個(gè)簡(jiǎn)單的例子 定義存儲(chǔ)過程 easyProcedure 入?yún)?兩個(gè)數(shù) 出參為 他們的和 使用存儲(chǔ)過程接著往下看 2.舉一個(gè)復(fù)雜的例子(例子比較復(fù)雜,但很實(shí)用) ①創(chuàng)建 TYPE 類型 atrr_type ②將 TYPE 類型 atrr_type 定義為表, 用做接收返回值 ③定義存儲(chǔ)過程 入?yún)?objt 出參為 一張表 ④

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包