1. 程式人生 > >Python 學習筆記-第24講:MySQL 資料庫儲存過程

Python 學習筆記-第24講:MySQL 資料庫儲存過程

1. ANACONDA(一個開源的Python發行版本)

Anaconda指的是一個開源的Python發行版本,其包含了conda、Python等180多個科學包及其依賴項。

Conda是一個開源的包、環境管理器,可以用於在同一個機器上安裝不同版本的軟體包及其依賴,並能夠在不同的環境之間切換

Anaconda包括Conda、Python以及一大堆安裝好的工具包,比如:numpy、pandas等

2. 檢視字元編碼的函式:

ord() 字元轉編碼

ord()函式是chr()函式(對於8位的ASCII字串)或unichr()函式(對於Unicode物件)的配對函式,它以一個字元(長度為1的字串)作為引數,返回對應的ASCII數值,或者Unicode數值,如果所給的Unicode字元超出了你的Python定義範圍,則會引發一個TypeError的異常。

chr() 編碼轉字元

chr()函式用一個範圍在range(256)內的(就是0~255)整數作引數,返回一個對應的字元。

unichr()

unichr() 返回的是Unicode字元

3. 儲存過程(MySQL 5.0 及更高版本)

儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。

一個儲存過程是一個可程式設計的函式,它在資料庫中建立並儲存。它可以有SQL語句和一些特殊的控制結構組成。當希望在不同的應用程式或平臺上執行相同的函式,或者封裝特定功能時,儲存過程是非常有用的。資料庫中的儲存過程可以看做是對程式設計中面向物件方法的模擬。它允許控制資料的訪問方式。

格式:

CREATE PROCEDURE 過程名 ([過程引數[,...]])

[特性 ...] 過程體

delimiter // 修改語句分隔符

示例:

DELIMITER //

CREATE PROCEDURE addMember(cardId INT, memberName CHAR(4), phoneNum CHAR(11))

BEGIN

INSERT INTO member (card_num, mname, phone) VALUES(cardId,memberName,phoneNum);

END

//

DELIMITER ;

call open_card(10001, 'tom', '13800138000');

注:

(1)這裡需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因為MySQL預設以";"為分隔符,如果我們沒有宣告分割符,那麼編譯器會把儲存過程當成SQL語句進行處理,則儲存過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將";"當做儲存過程中的程式碼,不會執行這些程式碼,用完了之後要把分隔符還原。

(2)儲存過程根據需要可能會有輸入、輸出、輸入輸出引數,這裡有一個輸出引數s,型別是int型,如果有多個引數用","分割開。

(3)過程體的開始與結束使用BEGIN與END進行標識。

引數:

MySQL儲存過程的引數用在儲存過程的定義,共有三種引數型別,IN,OUT,INOUT,形式如:

CREATE PROCEDURE([[IN |OUT |INOUT ] 引數名 資料類形...])

IN 輸入引數:表示該引數的值必須在呼叫儲存過程時指定,在儲存過程中修改該引數的值不能被返回,為預設值

OUT 輸出引數:該值可在儲存過程內部被改變,並可返回

INOUT 輸入輸出引數:呼叫時指定,並且可被改變和返回

呼叫儲存過程

CALL 儲存過程名(引數列表)

修改儲存過程

ALTER PROCEDURE 儲存過程名SQL語句程式碼塊

刪除儲存過程

DROP PROCEDURE  IF  EXISTS儲存過程名

顯示儲存過程

SHOW CREATE PROCEDURE 儲存過程名

參考連結:

4. 獲取自增ID

1) last_insert_id()

last_insert_id() 單個會話中最近一次執行的insert語句時表的自增id的值。不受其他的會話插入影響。

如果向表中插入的記錄,id自增,它的值為max(id),如果指定插入的id ,它的值為上一次插入的最大值。

使用select last_insert_id()時要注意,當一次插入多條記錄時,只是獲得第一次插入的id值,務必注意!

2) 使用@@identity

@@identity是表示的是最近一次向具有identity屬性(即自增列)的表插入資料時對應的自增列的值,是系統定義的全域性變數。

其特性last_insert_id 一樣.

3) 使用max(id)

select max(id) from tab; 返回的是tab 的最大id值。

4) 查看錶狀態

show table status

5) information_schema.tables

select table_name, AUTO_INCREMENT from information_schema.tables where table_name="get_max_id";

參考連結: