SQL存儲過程詳解

来源:https://www.cnblogs.com/abc-123456/archive/2018/04/23/8920058.html
-Advertisement-
Play Games

前言:存儲過程的好處 一.創建存儲過程 1.基本語法: create procedure sp_name()begin.........end 2.參數傳遞 create procedure sp_name()begin.........end 二.調用存儲過程 1.基本語法:call sp_nam ...


 前言:存儲過程的好處

1、使用了存過程,很多相似性的刪除,更新,新增等操作就變得輕鬆了,並且以後也便於管理!
2、存儲過程因為SQL語句已經預編繹過了,因此運行的速度比較快。   
3、存儲過程可以接受參數、輸出參數、返回單個或多個結果集以及返回值。可以向程式返回錯誤原因。     
4、存儲過程運行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程式運行。     
5、存儲過程主要是在伺服器上運行,減少對客戶機的壓力。   
6、存儲過程可以包含程式流、邏輯以及對資料庫的查詢。同時可以實體封裝和隱藏了數據邏輯。   
7、存儲過程可以在單個存儲過程中執行一系列SQL語句。   
8、存儲過程可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列複雜語句。

一.創建存儲過程

1.基本語法:
create procedure sp_name()
begin
.........
end
2.參數傳遞


二.調用存儲過程

1.基本語法:call sp_name()
註意:存儲過程名稱後面必須加括弧,哪怕該存儲過程沒有參數傳遞


三.刪除存儲過程

1.基本語法:
drop procedure sp_name//
2.註意事項
(1)不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程


四.區塊,條件,迴圈

1.區塊定義,常用
begin
......
end;
也可以給區塊起別名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出區塊,執行區塊以後的代碼
2.條件語句
if 條件 then
statement
else
statement
end if;
3.迴圈語句
(1).while迴圈
[label:] WHILE expression DO

statements

END WHILE [label] ;

 

(2).loop迴圈
[label:] LOOP

statements

END LOOP [label];

 

(3).repeat until迴圈
[label:] REPEAT

statements

UNTIL expression

END REPEAT [label] ;


五.其他常用命令

1.show procedure status
顯示資料庫中所有存儲的存儲過程基本信息,包括所屬資料庫,存儲過程名稱,創建時間等
2.show create procedure sp_name
顯示某一個存儲過程的詳細信息

 

 

MySQL存儲過程中要用到的運算符

 

mysql存儲過程學習總結-操作符

 

 

 

算術運算符

+     加   SET var1=2+2;       4
-     減   SET var2=3-2;       1
*     乘   SET var3=3*2;       6
/     除   SET var4=10/3;      3.3333
DIV   整除 SET var5=10 DIV 3;  3
%     取模 SET var6=10%3 ;     1

比較運算符


>            大於 1>2 False
<            小於 2<1 False
<=           小於等於 2<=2 True
>=           大於等於 3>=2 True
BETWEEN      在兩值之間 5 BETWEEN 1 AND 10 True
NOT BETWEEN  不在兩值之間 5 NOT BETWEEN 1 AND 10 False
IN           在集合中 5 IN (1,2,3,4) False
NOT IN       不在集合中 5 NOT IN (1,2,3,4) True
=            等於 2=3 False
<>, !=       不等於 2<>3 False
<=>          嚴格比較兩個NULL值是否相等 NULL<=>NULL True
LIKE         簡單模式匹配 "Guy Harrison" LIKE "Guy%" True
REGEXP       正則式匹配 "Guy Harrison" REGEXP "[Gg]reg" False
IS NULL      為空 0 IS NULL False
IS NOT NULL  不為空 0 IS NOT NULL True


邏輯運算符

與(AND)





AND

TRUE

FALSE

NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

NULL

NULL

NULL

NULL

NULL

 

 

 

或(OR)


OR

TRUE

FALSE

NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL


異或(XOR)


XOR

TRUE

FALSE

NULL

TRUE

FALSE

TRUE

NULL

FALSE

TRUE

FALSE

NULL

NULL

NULL

NULL

NULL



位運算符

|   位或
&   位與
<<  左移位
>>  右移位
~   位非(單目運算,按位取反)


 

 

 

mysq存儲過程中常用的函數,字元串類型操作,數學類,日期時間類。

 

mysql存儲過程基本函數


一.字元串類 
CHARSET(str) //返回字串字元集
CONCAT (string2  [,... ]) //連接字串
INSTR (string ,substring ) //返回substring首次在string中出現的位置,不存在返回0
LCASE (string2 ) //轉換成小寫
LEFT (string2 ,length ) //從string2中的左邊起取length個字元
LENGTH (string ) //string長度
LOAD_FILE (file_name ) //從文件讀取內容
LOCATE (substring , string  [,start_position ] ) 同INSTR,但可指定開始位置
LPAD (string2 ,length ,pad ) //重覆用pad加在string開頭,直到字串長度為length
LTRIM (string2 ) //去除前端空格
REPEAT (string2 ,count ) //重覆count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替換search_str
RPAD (string2 ,length ,pad) //在str後用pad補充,直到長度為length
RTRIM (string2 ) //去除後端空格
STRCMP (string1 ,string2 ) //逐字元比較兩字串大小,
SUBSTRING (str , position  [,length ]) //從str的position開始,取length個字元,
註:mysql中處理字元串時,預設第一個字元下標為1,即參數position必須大於等於1
mysql> select substring('abcd',0,2);
+-----------------------+
| substring('abcd',0,2) |
+-----------------------+
|                       |
+-----------------------+
1 row in set (0.00 sec)


mysql> select substring('abcd',1,2);
+-----------------------+
| substring('abcd',1,2) |
+-----------------------+
| ab                    |
+-----------------------+
1 row in set (0.02 sec)
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字元
UCASE (string2 ) //轉換成大寫
RIGHT(string2,length) //取string2最後length個字元
SPACE(count) //生成count個空格 
二.數學類

ABS (number2 ) //絕對值
BIN (decimal_number ) //十進位轉二進位
CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //進位轉換
FLOOR (number2 ) //向下取整
FORMAT (number,decimal_places ) //保留小數位數
HEX (DecimalNumber ) //轉十六進位
註:HEX()中可傳入字元串,則返回其ASC-11碼,如HEX('DEF')返回4142143
也可以傳入十進位整數,返回其十六進位編碼,如HEX(25)返回19
LEAST (number , number2  [,..]) //求最小值
MOD (numerator ,denominator ) //求餘
POWER (number ,power ) //求指數
RAND([seed]) //隨機數
ROUND (number  [,decimals ]) //四捨五入,decimals為小數位數]
註:返回類型並非均為整數,如:
(1)預設變為整形值
mysql> select round(1.23);
+-------------+
| round(1.23) |
+-------------+
|           1 |
+-------------+
1 row in set (0.00 sec)

mysql> select round(1.56);
+-------------+
| round(1.56) |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)

(2)可以設定小數位數,返回浮點型數據
mysql> select round(1.567,2);
+----------------+
| round(1.567,2) |
+----------------+
|           1.57 |
+----------------+
1 row in set (0.00 sec)
SIGN (number2 ) //返回符號,正負或0
SQRT(number2) //開平方
 
三.日期時間類
 
ADDTIME (date2 ,time_interval ) //將time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //轉換時區
CURRENT_DATE (  ) //當前日期
CURRENT_TIME (  ) //當前時間
CURRENT_TIMESTAMP (  ) //當前時間戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或時間
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式顯示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上減去一個時間
DATEDIFF (date1 ,date2 ) //兩個日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1為星期天
DAYOFYEAR (date ) //一年中的第幾天
EXTRACT (interval_name  FROM date ) //從date中提取日期的指定部分
MAKEDATE (year ,day ) //給出年及年中的第幾天,生成日期串
MAKETIME (hour ,minute ,second ) //生成時間串
MONTHNAME (date ) //英文月份名
NOW (  ) //當前時間
SEC_TO_TIME (seconds ) //秒數轉成時間
STR_TO_DATE (string ,format ) //字串轉成時間,以format格式顯示
TIMEDIFF (datetime1 ,datetime2 ) //兩個時間差
TIME_TO_SEC (time ) //時間轉秒數]
WEEK (date_time [,start_of_week ]) //第幾周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第幾天
HOUR(datetime) //小時
LAST_DAY(date) //date的月的最後日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分
 
附:可用在INTERVAL中的類型
DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 非常強大的文本操縱工具,sed,awk,grep 這個三個命令 都是操作文本文件的unix系統有幾個非常命令的特點:1. 對於內核而言,unix文件都是位元組序列。io設備也是文件。2. 至於文件的含義交由應用程式來解釋。其中文本文件非常重要,因為unix提供 很多了實用程式(utility),這些程 ...
  • 在VMware workstation12上新建虛擬機,發現無法連接網路。然後查了一些資料,知道了怎樣配置網路,記錄一下。 1、首先用ifconfig命令查看虛擬機的IP地址及網關信息 觀察顯示內容,查看虛擬機的網關名稱ens33是否有IP地址 2、如果沒有,使用vi /etc/sysconfig/ ...
  • 設計好處 良好的資料庫邏輯設計和物理設計師資料庫獲得高性能的基礎 範式化設計和反範式化設計(減少冗餘、減少異常、讓數據組織的更加和諧) 優化目的 減少數據冗餘(儘量) 儘量避免數據維護中出現更新、插入和刪除等異常 插入:如果表中的某個實體隨著另一個實體而存在 更新:如果更改表中的某個實體的單獨屬性時 ...
  • 使用變數並不能完全滿足SQL語句嚮應用程式輸出數據的要求的,一組變數只能存放一條記錄,而查詢結果的記錄數是不確定的,所以才有了游標的概念。 基本原理 在PL/SQL中執行select、insert、update和delete語句時,oracle會在記憶體中分配上下文區,即一個緩衝區。而游標就是指向該區 ...
  • 轉載自:http://www.cnblogs.com/knowledgesea/p/3699851.html。 什麼是游標 結果集,結果集就是select查詢之後返回的所有行數據的集合。 游標則是處理結果集的一種機制吧,它可以定位到結果集中的某一行,多數據進行讀寫,也可以移動游標定位到你所需要的行中 ...
  • set 是無序集合,最大可以包含(2 的 32 次方-1)個元素。set 的是通過 hash table 實現的, 所以添加,刪除,查找的複雜度都是 O(1) sadd key member 添加一個 string 元素到 key 對應 set 集合中,成功返回 1,如果元素以及 在集合中則返回 0 ...
  • 目前Oracle資料庫的管理,數據查詢等都需要安裝Oracle軟體或安裝Oracle Client等,遠程訪問都需要先登錄到伺服器等繁瑣的操作。如果是開發團隊,那麼每個開發,測試,管理人員都要經歷這個麻煩的過程。 使用Treesoft資料庫管理系統,基於web方式管理ORACLE,只需安裝一次,大家 ...
  • 官網解釋參見:https://dev.mysql.com/doc/refman/5.7/en/table-cache.html 其他可供參考的文章有: 關於表限制參數的使用:https://dba.stackexchange.com/questions/5232/mysql-table-cache- ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...