亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        利用Mysql存儲過程方法產(chǎn)生模擬表數(shù)據(jù)

        2018-11-15 01:33:54俞海
        電腦知識與技術(shù) 2018年20期
        關(guān)鍵詞:數(shù)據(jù)庫

        摘要:利用數(shù)據(jù)庫存儲過程產(chǎn)生軟件開發(fā)測試表中的模擬數(shù)據(jù)是一個非常有效的方法,而標準SQL是非過程化的語言,和程序設計語言相比,高度非過程化的優(yōu)點也造成其一個弱點:缺少流程控制能力,難以實現(xiàn)應用業(yè)務中的邏輯控制,而在各行業(yè)應用中存在很多很復雜的業(yè)務邏輯,簡單的標準SQL語言不能承擔該角色,解決的辦法就是要采用面向過程的如PL/SQL、T-SQL語言即存儲過程方法。該論文采用MySQL 存儲過程來模擬車輛通行信息,采用參數(shù)的方法,自動生成該參數(shù)指定行數(shù)的表記錄,供調(diào)試程序或統(tǒng)計的模擬數(shù)據(jù)源。

        關(guān)鍵詞:數(shù)據(jù)庫;存儲過程;Mysql

        中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2018)20-0016-03

        標準SQL是非過程化的查詢語言,具有操作統(tǒng)一、面向集合、功能豐富、使用簡單等優(yōu)點。但和程序設計語言相比,高度非過程化的優(yōu)點也造成了它的一個弱點:缺少流程控制能力,難以實現(xiàn)應用業(yè)務中的邏輯控制,而在各行業(yè)應用中存在很多很復雜的業(yè)務邏輯,簡單的標準SQL語言不能承擔該角色,這就提出可以面向過程的如PL/SQL、T-SQL數(shù)據(jù)庫語言進行編程,即存儲過程方式,通過if then 語句或其他DML SQL 來生成所需要的數(shù)據(jù)。這種方式僅簡單,而且容易實現(xiàn),容易調(diào)試,并且可以包含一些業(yè)務邏輯和事務控制,是生成模擬數(shù)據(jù)的一種高效方法。

        1模擬數(shù)據(jù)生成的意義背景

        程序開發(fā)離不開數(shù)據(jù)源,比如商務網(wǎng)站開發(fā),表中數(shù)據(jù)是否真實,是否滿足要求,對調(diào)試程序有很大的幫助測試作用,能幫助開發(fā)者快速發(fā)現(xiàn)程序的應用設計是否滿足流程要求,數(shù)據(jù)查詢和統(tǒng)計是否正確,以及大數(shù)據(jù)平臺下的程序性能和網(wǎng)站的響應時間,對用戶的真實體驗等是非常關(guān)鍵的一個步驟,目前開發(fā)環(huán)境下數(shù)據(jù)庫表中數(shù)據(jù)的量級常常不能滿足大記錄數(shù)據(jù)的要求,比如100萬行記錄或更高,本論文利用存儲過程生成大批量數(shù)據(jù),有助于真實數(shù)據(jù)的模擬和統(tǒng)計速度的統(tǒng)計查詢,有較好的應用場景。

        2數(shù)據(jù)庫存儲過程編程優(yōu)點

        存儲過程的優(yōu)點是明顯的,使用存儲過程具有以下優(yōu)點:由于存儲過程不像解釋執(zhí)行的SQL語句那樣在提出操作請求時才進行語句分析和優(yōu)化工作,因而運行效率高,它提供在服務器端快速執(zhí)行SQL語句的有效途徑。

        存儲過程降低了客戶機和服務器之間的通信量。客戶機上的應用程序只要通過網(wǎng)絡向服務器發(fā)出調(diào)用存儲過程的名字和參數(shù),就可以讓關(guān)系數(shù)據(jù)庫管理系統(tǒng)執(zhí)行其中的多行 SQL語句并進行數(shù)據(jù)處理。

        另外也方便實施企業(yè)規(guī)則??梢园哑髽I(yè)規(guī)則的運算程序?qū)懗纱鎯^程放入數(shù)據(jù)庫服務器中,由關(guān)系數(shù)據(jù)庫管理,既有利于集中控制,又能夠方便地進行維護。當企業(yè)規(guī)則發(fā)生變化時只要修改存儲過程即可。

        存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的運算。

        可保證數(shù)據(jù)的安全性和完整性。

        理由1:通過存儲過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全。

        理由2:通過存儲過程可以使相關(guān)的動作在一起發(fā)生,從而可以維護數(shù)據(jù)庫的完整性。

        在運行存儲過程前,數(shù)據(jù)庫已對其進行了語法和句法分析,存儲過程只在創(chuàng)造時進行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。并給出了優(yōu)化執(zhí)行方案。

        這種已經(jīng)編譯好的過程可極大地改善SQL語句的性能。由于執(zhí)行SQL語句的大部分工作已經(jīng)完成,所以存儲過程能以極快的速度執(zhí)行。

        客戶端調(diào)用存儲過程只需要傳存儲過程名和相關(guān)參數(shù)即可,與傳輸SQL語句相比自然數(shù)據(jù)量少了很多。

        在存儲過程中,可把體現(xiàn)企業(yè)規(guī)則的運算過程或接口程序放入數(shù)據(jù)庫服務器中,以便集中控制或當企業(yè)規(guī)則發(fā)生變化時在服務器中改變存儲過程即可,無須修改任何應用程序。

        企業(yè)規(guī)則的特點是要經(jīng)常變化,如果把體現(xiàn)企業(yè)規(guī)則的運算程序放入應用程序中,則當企業(yè)規(guī)則發(fā)生變化時,就需要修改應用程序工作量非常之大(修改、發(fā)行和安裝應用程序)。

        如果把體現(xiàn)企業(yè)規(guī)則的運算放入存儲過程中,則當企業(yè)規(guī)則發(fā)生變化時,只要修改存儲過程就可以了,應用程序無須任何變化。

        另外存儲過程可以重復使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量。同時安全性高,可設定只有某些用戶才具有對指定存儲過程的執(zhí)行使用權(quán)。

        3 數(shù)據(jù)庫存儲過程編程方法

        存儲過程是過程化SQL語句,這個過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務器中,因此稱它為存儲過程,使用時只需要在數(shù)據(jù)庫環(huán)境或宿主語言中調(diào)用即可。

        存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集。允許用戶聲明變量,存儲過程是由流控制和SQL語句書寫的過程,這個過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務器中。這樣每次調(diào)用可節(jié)省調(diào)用者發(fā)送SQL請求的開銷,存儲過程可由應用程序通過調(diào)用來執(zhí)行,也可在數(shù)據(jù)庫中創(chuàng)建、調(diào)試或運行。在創(chuàng)建存儲過程中,也可以使用游標來處理多行記錄的操作,這樣存儲過程既有SQL的非過程化特性,也有CURSOR游標的指針靈活性,面向記錄的過程化特性,所以在數(shù)據(jù)庫編程中,存儲過程是非常重要的一個方法。

        存儲過程是數(shù)據(jù)庫中的一個重要對象,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。

        同時,存儲過程可以接收和輸出參數(shù)、返回執(zhí)行存儲過程的狀態(tài)值,也可以嵌套調(diào)用。

        4利用myql數(shù)據(jù)庫存儲過程方法生成汽車車牌記錄數(shù)據(jù)信息

        基本的SQL是高度非過程化的語言。嵌入式SQL將SQL語句嵌入程序設計語言,借助高級語言的控制功能實現(xiàn)過程化。過程化SQL是對SQL的擴展,使其增加了過程化語句功能。

        過程化SQL程序的基本結(jié)構(gòu)是塊(Block)。所有的過程化SQL程序都是由塊組成的。這些塊之間可以相互嵌套,每一個塊完成一個邏輯操作。

        一個完整的TSQL語句塊由以下3大部分組成:

        DECALRE 定義部分 (該聲明定義部分是可選的)。

        BEGIN

        執(zhí)行處理部分,一般包含流程控制,數(shù)據(jù)查詢,DML,事務處理,游標處理等數(shù)據(jù)庫操作的功能。此部分是必須的。

        END

        聲明定義部分主要是變量和常量的定義:

        1)變量定義

        declare變量名 數(shù)據(jù)類型

        2)賦值語句

        Set 變量名=常量或表達式

        Mysql TSQL程序控制語句

        TSQL為了能夠更好地處理面向記錄的數(shù)據(jù)庫數(shù)據(jù),必須有功能強大的流程控制語句。

        過程化SQL提供了流程控制語句,主要有條件控制語句和循環(huán)控制語句。這些語句的語法、語義和一般的高級語言(如C語言)相似,這里只做概要的介紹。

        1)條件控制語句

        一般有三種形式的IF語句:IF-THEN語句、IF-THEN-ELSE語句和嵌套的IF語句。

        (1)IF語句

        IF condition THEN

        Sequence_of_statements; /*條件為真是語句序列才被執(zhí)行*/

        END IF /* 條件為假或NULL時什么也不做,控制轉(zhuǎn)移至下一個語句 */

        2) IF-THEN 語句

        IF condition THEN

        Sequence_of_statementsl; /*條件為真時執(zhí)行語句序列1*/

        ELSE

        Sequence_of_statements2; /*條件為假或NULL時執(zhí)行語句序列2*/

        END IF;

        3) 嵌套的IF語句

        在THEN和ELSE子句中還可以再包含IF語句,即嵌套IF語句。

        2)循環(huán)控制語句

        過程化SQL有三種循環(huán)結(jié)構(gòu):LOOP,WHILE-DO和FOR-LOOP。

        (1)WHILE-DO循環(huán)語句

        WHILE condition DO

        Sequence_of_statements;/*條件為真時執(zhí)行循環(huán)體內(nèi)的語句序列*/

        END WHILE;

        每次執(zhí)行循環(huán)語句之前首先要對條件進行求值,如果條件為真則執(zhí)行循環(huán)體的語句序列,如果條件為假則跳過循環(huán)并把控制傳遞給下一個語句。

        (2)LOOP循環(huán)語句

        該循環(huán)沒有內(nèi)置循環(huán)條件,但可以通過leave 語句退出循環(huán)。表示形式如下:

        LOOP_label:LOOP

        Sequence_of_statements;

        If condition then leave LOOP_label;

        End if;

        END LOOP;

        (3)repeat循環(huán)語句

        該語句執(zhí)行一次循環(huán)體,之后判斷condition條件是否為真,為真則退出循環(huán),否則繼續(xù)執(zhí)行循環(huán)體。repeat語句的表示形式如下。

        REPEAT

        Sequence_of_statements;

        UNTIL condition

        END REPEAT;

        5具體存儲過程的設計步驟

        存儲過程有以下特性:有輸入輸出參數(shù);可以聲明變量;有if/else, case,while等控制語句。通過編寫存儲過程,可以實現(xiàn)復雜的邏輯功能。函數(shù)的普遍特性:模塊化,封裝,代碼復用;速度快,只有首次執(zhí)行需經(jīng)過編譯和優(yōu)化步驟,后續(xù)被調(diào)用可以直接執(zhí)行,省去以上步驟。

        步驟1:創(chuàng)建存儲過程,隨機生成車牌號

        先創(chuàng)建個表(table),rand_Cid:用來存儲生成的序號及車牌號

        CREATE TABLE rand_Cid

        id INT AUTO_INCREMENT PRIMARY KEY,

        cid CHAR(7)

        )DEFAULT CHARACTER SET utf8;

        步驟2:創(chuàng)建存儲過程ranCid2(num int),其中num參數(shù)是生成的記錄行數(shù)。 以下該過程實現(xiàn)隨機生成一個車牌號信息:

        CREATE PROCEDURE ranCid2(num int)

        BEGIN

        DECLARE count int;

        DECLARE i INT DEFAULT 0;

        DECLARE sheng VARCHAR(31);

        DECLARE shi CHAR(26);

        DECLARE last CHAR(36);

        DECLARE l_sheng CHAR(1);

        DECLARE l_shi CHAR(1);

        DECLARE last_str varchar(5);

        DECLARE r_str varchar(7);

        SET shi = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

        SET sheng= '京津冀晉蒙遼吉黑滬蘇浙皖閩贛魯豫鄂湘粵桂瓊川貴云渝藏陜甘青寧新';

        SET last = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

        SET count =1;

        SET i =1;

        SET last_str = '';

        SET l_sheng = SUBSTRING(sheng,F(xiàn)LOOR(1+RAND()*31),1);

        SET l_shi = SUBSTRING(shi,F(xiàn)LOOR(1+RAND()*26),1);

        WHILE i < 5 DO

        Set last_str=

        CONCAT(last_str,SUBSTRING(last,F(xiàn)LOOR(1+RAND()*36),1));

        SET i=i+1;

        END WHILE;

        SET r_str = CONCAT(l_sheng,l_shi,'-',last_str);

        INSERT INTO rand_Cid(cid) VALUES(r_str);

        SET count =count+1;

        END $

        步驟3:創(chuàng)建存儲過程,調(diào)用ranCid2生成指定的num行記錄數(shù)據(jù)

        CREATE PROCEDURE largeCid(IN num INT)

        BEGIN

        DECLARE i INT DEFAULT 0;

        REPEAT

        CALL ranCid2(5);

        SET i = i + 1;

        UNTIL i>= num END REPEAT;

        SELECT * FROM rand_Cid;

        END $

        在數(shù)據(jù)庫mysql提示符下輸入:mysql> call largeCid(10); 運行結(jié)果如下:

        生成10行模擬表中數(shù)據(jù),如果要生成100000行記錄,只要修改參數(shù)num,即調(diào)用存儲過程:call largeCid(100000),就可在表rand_Cid中生成100000記錄數(shù)據(jù)。

        6 結(jié)論

        通過利用數(shù)據(jù)庫存儲過程的方法,設計一個可生成輸入?yún)?shù)對應的數(shù)據(jù)記錄,該數(shù)據(jù)記錄可以是5萬行數(shù)據(jù)或100萬行數(shù)據(jù)或更多,都可以輕松指定產(chǎn)生,使軟件的開發(fā)測試數(shù)據(jù)和實際數(shù)據(jù)有相同的規(guī)模和真實的體驗,使軟件開發(fā)測試周期縮短,獲得了非常好的測試或調(diào)試預期效果,為進一步開發(fā)出實用的數(shù)據(jù)庫應用程序提供模擬的數(shù)據(jù)源。

        參考文獻:

        [1] 俞海. 數(shù)據(jù)庫基本原理及應用開發(fā)教程. 南京:南京大學出版社, 2015.

        猜你喜歡
        數(shù)據(jù)庫
        數(shù)據(jù)庫
        財經(jīng)(2017年15期)2017-07-03 22:40:49
        數(shù)據(jù)庫
        財經(jīng)(2017年2期)2017-03-10 14:35:35
        數(shù)據(jù)庫
        財經(jīng)(2016年15期)2016-06-03 07:38:02
        數(shù)據(jù)庫
        財經(jīng)(2016年3期)2016-03-07 07:44:46
        數(shù)據(jù)庫
        財經(jīng)(2016年6期)2016-02-24 07:41:51
        數(shù)據(jù)庫
        財經(jīng)(2010年20期)2010-10-19 01:48:32
        黄污在线观看一区二区三区三州| 五月天无码| 美女草逼视频免费播放| 亚洲成人免费av影院| 成人美女黄网站色大免费的| 国产精品久免费的黄网站| 日本女同伦理片在线观看| 麻豆国产精品一区二区三区| 久久午夜无码鲁丝片午夜精品| 精品国产黑色丝袜高跟鞋| 无码 免费 国产在线观看91| 成人av毛片免费大全| 亚洲视频在线观看| 久久精品国产精品亚洲毛片| 日本一区二区三本视频在线观看| 国产三级精品三级在线专区 | 最全精品自拍视频在线| 亚洲国产av无码精品无广告| 日本丰满熟妇bbxbbxhd| 不卡国产视频| 国产一区二区资源在线观看| 亚洲av无码国产精品色午夜字幕| 欧美极品少妇性运交| 久久国产av在线观看| 丝袜美腿视频一区二区| 亚洲国产精品综合久久网各| 伊人久久大香线蕉在观看| 亚洲天堂av在线一区| 日日噜噜夜夜狠狠va视频v| a级黑人大硬长爽猛出猛进| 亚洲中文字幕无码不卡电影| 国产在线91精品观看| 人妻少妇被粗大爽视频| 比较有韵味的熟妇无码| 亚洲av无码国产精品麻豆天美 | 狠狠人妻久久久久久综合蜜桃| 亚洲AV色无码乱码在线观看| 国产女主播免费在线观看| 国产精品一区二区三区在线蜜桃| 怡红院a∨人人爰人人爽| 欧美精品久久久久久三级|