MySQL的存儲過程
1、概念:預先編譯好的sql語句集合
2、提高效率:簡化代碼的重用性,簡化操作,減少了編譯次數並且減少了和數據庫服務器的鏈接次數。
3、存儲過程的參數列表
參數模式 參數名 參數類型
參數模式:in:需要傳入方傳值
out:該參數可以作爲返回值
inout:繼需要參數值,也有返回值
4、BEGIN…END
(1)每條sql需要分號結尾
(2)存儲過程結尾需要DELIMITER(DELIMITER$$)
5、調用
call 存儲過程名(實參列表)
6、定義變量
DECLEAR 變量名 變量類型
1. 聲明語句結束符:DELIMITER $$ 或 DELIMITERo
2. 存儲過程開始和結束:`BEGIN...END`
3. 變量賦值:SET @p_in=1
4. 變量定義:DECLARE 1_INT int unsigned default 40000`
5. 創建存儲過程、存儲函數:
6. create procedure 存儲過程名(參數)
例:
create procedure in_param(in p_in int ) #in 表示輸入參數 p_in參數名 int 數據類型
例2:
create procedure out_param(out p_out varchar)`
8. 存儲過程體:`create function 存儲函數名(參數)`
9. 過程體格式
開始於begin結束end
可以多層嵌套
BEGIN
BEGIN
statements
END
END
MySQL調優:索引調優、sql語句調優
1、條件語句調優
(1)where之後的條件,儘量不使用函數
(2)like之後使用最左檢索,例:like “ab%” 而非 like “%b%”
2、索引調優
(1)索引的添加要注意,不要添加在常做修改的字段上
(2)多使用符合索引
(3)使用explian先查看索引的type級別,進行級別的升高
3、複雜sql優化
儘量簡化成子查詢,避免複雜的混合查詢
應用程序內存溢出問題解決
棧內存溢出:程序所要求的棧深度過大導致。
堆內存溢出: 分清 內存泄露還是 內存容量不足。泄露則看對象如何被 GC Root 引用。不足則通過 調大 -Xms,-Xmx參數。
持久帶內存溢出:Class對象未被釋放,Class對象佔用信息過多,有過多的Class對象。 通過-XX:PermSeize和-XX:MaxPermSeize限制方法區大小
無法創建本地線程:總容量不變,堆內存,非堆內存設置過大,會導致能給線程的內存不足。
該問題來自該博客
MySQL內置的函數
count()計數
avg()平均數
max()最大
min()最小
sum()求和
單行函數:針對單行數據
length()單行數據長度
concat()拼接字段
reverse()字符串反轉
trim()去掉空格
sumstr()截取字符串
strcmp()匹配字符,匹配返回0
now()當前時間
date_format(date,“yy年MM月dd日”) 日期格式轉換
datediff() 返回兩者的差值
if()判斷
ifnull()判斷是否爲空
數據庫排序、分組、分頁、鏈表查詢
排序order by
升序ASC
降序DESC
分組group by
鏈表
內連接:inner join … on
左外:left join …on
右外:right join … on
on 後的條件:不管是否成立都會有返回值
where 後的條件不成立則無返回值
limit 使用
limit 2,3;從2開始,查3條數據