mysql 執行語句是要先編譯,然後再執行的。這樣如果查詢併發大的時候。會浪費很多資源和時間。造成mysql程序占用資源過多,症狀就是慢。但儲存過程可以把一些特別的語句封裝成乙個方法 ,再編譯好成乙個可以執行的方法,對外只要接收引數就可以了。這樣就不用再編譯。執行就快了。什麼時候會用到?你覺得你資料庫因為同時出現太多讀寫操作而變得慢 ,那麼就要用了,主要用來提公升效能。sql語句需要先編譯然後執行,而儲存過程是一組為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。其他看法:
1.在傳統企業,比如銀行什麼的,有嚴格的開發規範指定所有的業務邏輯處理必須放在儲存過程裡。開發人員不需要知道表結構,不需要知道字段型別,只用呼叫就好,保證資料庫的安全性。所以必須保證寫出的儲存過程效能是極高的,但是即使效能很好,在資料庫端進行大量的計算,還是會影響資料庫的效能。
2.也看到阿里等等的大牛說不要使用儲存過程,在大流量衝擊下,資料庫的負載壓力會特別大,降低吞吐量。而且不易遷移和維護。
3.在網際網路企業裡,應該都很少使用儲存過程吧,至少我沒有碰到,業務邏輯需要在資料庫端處理的。
1、很多相似性的刪除,更新,新增等操作就變得輕鬆了,並且以後也便於管理!2、儲存過程因為sql語句已經預編繹過了,因此執行的速度比較快。
3、儲存過程可以接受引數、輸出引數、返回單個或多個結果集以及返回值。
4、儲存過程執行比較穩定,不會有太多的錯誤。
5、儲存過程主要是在伺服器上執行,減少對客戶機的壓力。
6、儲存過程可以從自己的儲存過程內引用其它儲存過程,簡化複雜語句。
1.建立1.建立儲存過程2.刪除
3.呼叫
1.基本語法:
create procedure sp_name()
begin
.........
end2.引數傳遞
2.刪除drop procedure sp_name;
3.呼叫1.基本語法:call sp_name()
注意:儲存過程名稱後面必須加括號,哪怕該儲存過程沒有引數傳遞
首先建立一張students學生表,增加欄位與插入資料如下
5.1建立不帶引數的儲存過程(檢視學生個數)
delimiter ;;
create procedure `select_students_count`()
begin
select count(id) from students;
end;;
delimiter ;
執行儲存過程
call select_students_count();
5.2 帶引數的儲存過程(根據城市查詢總數)
delimiter ;;
create procedure `select_students_by_city_count`(
in _city varchar(225)
)begin
select count(id) from students where city = _city;
end;;
delimiter ;
執行儲存過程
call select_students_by_city_count('杭州');
到底要不要拆分函式
問題描述 怎樣的函式才算是有意義的函式?比如這樣的函式有沒有意義?1 只被呼叫一次的函式 2 只有一句實現內容的函式 3 函式很多的引數 比如乙個函式,有很多區域性變數,如果要拆成多個函式,那麼每個函式都要傳遞這些區域性變數,會造成函式的引數很多。在拆分函式這個問題上,我們要考慮我們在開發過程中,是...
到底要不要拆分函式
怎樣的函式才算是有意義的函式?比如這樣的函式有沒有意義?1 只被呼叫一次的函式 2 只有一句實現內容的函式 3 函式很多的引數 比如乙個函式,有很多區域性變數,如果要拆成多個函式,那麼每個函式都要傳遞這些區域性變數,會造成函式的引數很多。在拆分函式這個問題上,我們要考慮我們在開發過程中,是以寫為主?...
到底要不要拆分函式
怎樣的函式才算是有意義的函式?比如這樣的函式有沒有意義?1 只被呼叫一次的函式 2 只有一句實現內容的函式 3 函式很多的引數 比如乙個函式,有很多區域性變數,如果要拆成多個函式,那麼每個函式都要傳遞這些區域性變數,會造成函式的引數很多。在拆分函式這個問題上,我們要考慮我們在開發過程中,是以寫為主?...