儲存過程例項二

2021-08-15 06:09:38 字數 1973 閱讀 6645

1、過程例項

begin

set @createtable = concat('create table table_one_',date_format(date_sub(current_timestamp,interval 1 day),'%y%m%d'),' like table_one');

set @insertdata = concat('insert into table_one_',date_format(date_sub(current_timestamp,interval 1 day),'%y%m%d'),' select * from table_one');

set @droptable= concat(' drop table_one_', date_format(date_sub(current_timestamp,interval 7 day),'%y%m%d'));

set @time = unix_timestamp(concat( date_format(date_sub(current_timestamp,interval 1 day),'%y%m%d'),'000000'));

prepare stmt1 from @createtable ;

execute stmt1 ;

prepare stmt2 from @insertdata ;

execute stmt2 ;

prepare stmt3 from @droptable ;

execute stmt3 ;

truncate table table_one;

insert into adp_web_city_count_his(city,labels,counts,input_time) (select a.city,a.labels,a.counts,@time from (select * from adp_web_city_count)a);

insert into adp_web_total_count_his(labels,counts,input_time) (select a.labels,a.counts,@time from (select * from adp_web_total_count)a);

end

2、字段解析: contact: 拼接字串, date_format():格式化時間,這個儲存過程的功能就是備份表,備份七天,刪除7以前的資料

3、prepare: 

prepare sql產生的原因。首先從mysql伺服器執行sql的過程開始講起,sql執行過程包括以下階段 詞法分析->語法分析->語義分析->執行計畫優化->執行。詞法分析->語法分析這兩個階段我們稱之為硬解析。詞法分析識別sql中每個詞,語法分析解析sql語句是否符合sql語法,並得到一棵語法樹(lex)。對於只是引數不同,其他均相同的sql,它們執行時間不同但硬解析的時間是相同的。而同一sql隨著查詢資料的變化,多次查詢執行時間可能不同,但硬解析的時間是不變的。對於sql執行時間較短,sql硬解析的時間佔總執行時間的比率越高。而對於**應用的絕大多數事務型sql,查詢都會走索引,執行時間都比較短。因此**應用db sql硬解析佔的比重較大。 

2)  execute 接收客戶端stmt->id和引數等資訊。注意這裡客戶端不需要再發sql過來。伺服器根據stmt->id在preparestatement cache中查詢得到硬解析後的stmt, 並設定引數,就可以繼續後面的優化和執行了。

prepare在execute階段可以節省硬解析的時間。如果sql只執行一次,且以prepare的方式執行,那麼sql執行需兩次與伺服器互動(prepare和execute), 而以普通(非prepare)方式,只需要一次互動。這樣使用prepare帶來額外的網路開銷,可能得不償失。我們再來看同一sql執行多次的情況,比如以prepare方式執行10次,那麼只需要一次硬解析。這時候  額外的網路開銷就顯得微乎其微了。因此prepare適用於頻繁執行的sql。

prepare的另乙個作用是防止sql注入,不過這個是在客戶端jdbc通過轉義實現的,跟伺服器沒有關係。 

儲存過程例項

首先查詢,如果有則更新,如果沒有則新增。create proc sp drugstockrecord drugid int,department varchar 500 batchnum varchar 500 amount float,stocktime datetime,producedate ...

儲存過程例項

例1 create proc proc stu sname varchar 20 pwd varchar 20 as select from ren where sname sname and pwd pwd go檢視結果 proc stu admin admin 例2 下面的儲存過程實現使用者驗證...

儲存過程例項

資料庫環境 sqlserver 概述 查詢某個月份的每天的所有資料,然後存到臨時表裡面,再把臨時表裡面的結果集返回。判斷要建立的儲存過程名是否存在 if exists select from dbo.sysobjects where id object id n dbo sp dormlevelmo...