MySQL 超新手入門(12)Prepared Statement by Michael | CodeData
top

MySQL 超新手入門(12)Prepared Statement

分享:

專欄作者新書出版:Android App程式開發剖析 第三版(適用Android 8 Oreo與Android Studio 3)

MySQL 超新手入門(11)Views << 前情

1 使用者變數

MySQL資料庫伺服器提供一種簡易的儲存資料方式,稱為「使用者變數、user variables」。使用者變數儲存一些簡單的資料,例如數字或字串,它們可以在後續的操作中使用。下列是設定使用者變數的語法:

mysql_12_snap_01

下列的敘述設定兩個儲存字串資料的使用者變數:

mysql_12_snap_02

設定好使用者變數以後,你可以在「SELECT」敘述中查詢它們儲存的內容:

mysql_12_snap_03

如果你需要設定多個變數的話,可以在一個「SET」敘述中設定多個需要的使用者變數:

mysql_12_snap_04

使用查詢敘可以確認上列的敘述已經設定好的兩個使用者變數:

mysql_12_snap_05

使用「SELECT」敘述也可以設定需要的使用者變數,不過要特別注意指定的符號只能使用「:=」:

mysql_12_snap_06

下列的敘述設定兩個儲存整數資料的使用者變數,因為是使用「SELECT」敘述,所以設定好使用者變數以後,也會顯示設定的使用者變數內容:

mysql_12_snap_07

再使用查詢敘確認上列的敘述已經設定好的兩個使用者變數:

mysql_12_snap_08

已經設定好的使用者變數,可以使用在大部份的敘述中,例如下列的範例使用變數來設定查詢敘述的條件設定:

mysql_12_snap_09

使用「SELECT」敘述設定使用者變數的方式,也可以直接把查詢敘述傳回的資料儲存起來:

mysql_12_snap_10

上列範例執行後所設定的使用者變數,也可以使用在後續的敘述中:

mysql_12_snap_11

你也可以拿使用者變數來執行需要的運算:

mysql_12_snap_12

註:「LIMIT」子句指定的數字不可以使用變數。

2 Prepared Statements的應用

一個資料庫在建立好並開始使用以後,資料庫伺服器就會接收各種不同的敘述來執行工作。以查詢敘述來說,有一些敘述可能大部份的內容都是一樣的,只有在條件的設定上會不一樣。就算這些敘述的內容是差不多的,資料庫伺服器每次接收到敘述時,還是要執行一些同樣的工作:

mysql_12_snap_13

如果有「許多要執行的敘述,可是內容卻相似」的情況,可以使用「Prepared statements」改善資料庫的效率。首先,你要把這種敘述先準備好:

mysql_12_snap_14

伺服器已經準備好的敘述就稱為「prepared statement」,後續要使用這種敘述前,要先設定好prepared statement需要的資料。在上列的範例中,因為prepared statement的內容中有一個問號,所以你要先設定好一個資料,也就是國家的代碼。然後再請伺服器執行指定的prepared statement,伺服器就會傳回執行後的結果了:

mysql_12_snap_15

3 建立、執行與移除Prepared Statements

如果有「許多要執行的敘述,可是內容卻相似」的情形,你就可以考慮請伺服器把這種敘述建立為prepared statement。下列是建立prepared statement的語法:

mysql_12_snap_16

如果常需要查詢某個國家的代碼、名稱與GNP的話,你可以建立一個下列的prepared statement。敘述中的問號是「參數標記、parameter marker」,表示執行這個prepared statement需要一個參數資料:

mysql_12_snap_17

建立好需要的prepared statement以後,你必須使用「EXECUTE」來執行它:

mysql_12_snap_18

執行一個prepared statement並不一定需要傳送資料給它,要依據prepared statement包含的敘述中有沒有問號來決定。如果有問號的話,一個問號就需要先設定好一個使用者變數,然後再使用「USING」傳送資料給prepared statement使用:

mysql_12_snap_19

後續要執行這個查詢時,只要依照同樣的步驟就可以查詢別個國家資料了:

mysql_12_snap_20

如果一個prepared statement已經不需要了,你可以使用下列的語法,從伺服器中刪除指定的prepared statement:

mysql_12_snap_21

下列的敘述執行以後會刪除名稱為「my_country」的prepared statement:

mysql_12_snap_22

4 Prepared Statements的參數

在建立prepared statement時,你會依照敘述的需求設定參數標記,這些參數標記也決定執行prepared statement時,須要傳多少參數資料給它才可以正確的執行。以下列新增紀錄的敘述來說,它就使用了三個參數標記,依序為部門編號、名稱與地點:

mysql_12_snap_23

根據prepared statement使用的參數標記,在執行prepared statement時一定傳送正確的參數資料,否則會產生錯誤訊息:

mysql_12_snap_24

下列的範例先把要新增部門的編號、名稱與地點資料設定為使用者變數,在執行「new_dept」時傳送給它使用:

mysql_12_snap_25

如果傳送的參數數量不對的話,就會產生錯誤訊息:

mysql_12_snap_26

如果傳送的使用者變數不存在的話,會自動使用「NULL」值代替:

mysql_12_snap_27

5 有效範圍

所有使用者變數與prepared statements都是某一個用戶端專屬的:

mysql_12_snap_28

如果用戶端離線以後,他所設定的使用者變數與prepared statements都會被清除:

mysql_12_snap_29

所以建立prepared statements時,不可以指定它是屬於哪一個資料庫,否則會有錯誤訊息:

mysql_12_snap_30

 

後續 >> MySQL 超新手入門(13)Stored Routines 入門

分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

jack123455200010/05

請問 為什麼SET變數的值之後
然後用SELECT查詢 它是NULL值呢?
好像SET給的值根本沒有匯進去0..0

熱門論壇文章

熱門技術文章