敷衍的面試|記錄問題僅供參考,不代表最終答案

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條數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章