標籤:MySQL資料庫 預存程序常見迴圈 視圖 函數 時間函數
一.MySQL預存程序中常見的迴圈
1.while迴圈:WHILE.....DO.....END WHILE
例1:
建立預存程序(求1+2+.......+num的和):
建立成功,進行調用:
顯示結果:
2.REPEAT迴圈: REPEAT.........UNTLL END REPEAT
例2:
建立預存程序:
建立完成,調用預存程序:
顯示結果:
3.LOOP迴圈:LOOP END LOOP
例3:
建立預存程序:
建立成功,調用預存程序:
顯示結果:
二.MySQL中的視圖
1.概念:有結構(有行有列),但沒有結果(結構中不真實儲存資料)的虛擬表,虛擬表的結構來源不是自己定義的,而是從對應的基表中產生(視圖資料的來源)
2.建立視圖文法:
例1(建立單表視圖):
例2(建立多表視圖)
3.查看視圖,其實視圖就是一張虛擬表,那關於查詢表的語句,對視圖都是可以用的
比如:show tables; desc my_view1;
查詢檢視my_view2中的表資料:
顯示結果:
但是在查看視圖建立語句的時候,把tables改成view
例:
顯示結果:
4.視圖一旦建立,系統會在視圖對應的資料庫檔案下,建立一個對應的結構檔案:frm檔案
5.視圖的使用:視圖的使用,只是為了查詢,你可把視圖當做表一樣去使用,例如:select from my_view1;
顯示結果:
(視圖的執行:其本質就是執行封裝的select 語句)
6.視圖的刪除:drop view 視圖名稱
7.視圖的修改:視圖本身不可以修改,但是視圖的來源是可以修改的(其實就是修改select 語句)
文法:alter view 視圖名稱 as 新的select 語句;
例:
顯示結果:
8.視圖的意義:
(1)視圖可以節省SQL語句,將一條複雜的查詢語句,使用視圖進行儲存,以後可以對視圖進行操作
(2)資料安全,視圖操作注意是針對查詢語句的,如果對視圖結構進行處理(比如刪除),不會影響基表的資料.
所以相對來說資料比較安全
(3)視圖往往是在大項目中去使用,而且是多系統中去使用.我可以對外提供一些有用的資料,隱藏一些關鍵的資料.
(4)視圖對外可以提供友好的資料:不同的視圖提供不同的資料,對外提供的資料好像是經過專門設計的一樣.
(5)視圖可以更好的進行許可權控制 比如對外隱藏我的一些基表的名稱
9.視圖資料的操作:視圖是可以進行資料操作的(比如 增,刪,改,視圖中的資料),但是有很多限制
(1)插入資料資料:
#1.多表視圖不能插入資料
#2.單表視圖中可以插入資料(如果視圖中欄位沒有基表中不可為空的欄位且沒有預設值的欄位,是插入不成功的)
#3.視圖是可以向基表中插入資料的 (視圖的操作是影響基表的)
(2)視圖資料刪除:
#1.多表視圖不能刪除資料
#2.單表視圖可以刪除資料,也會影響到基表
(3)視圖更新資料:
#1.單表視圖,多表視圖都可以更新資料
更新限制:with check option
例如:create view my_view1 as select from students where age>30 with check option;
表示視圖資料的來源都是年齡大於30的,with check option 決定通過視圖更新的時候,不能將已得到資料age>30的學生 改成age小於30 的,那麼:update my_v1 set age=20 where id=1; 就會報錯 不允許改 因為做了限制
三.MySQL資料庫中的函數
1.系統函數:直接調用即可,任何函數都有傳回值,函數的調用是通過select調用,因為有傳回值,所以只能用select調用
mysql中字串是以單個字元為單位的:
(1)Substring(原字串,從哪個地方,截取幾個);mysql中下標從1開始算起
例如:定義一個變數:
顯示結果:
(2)字元長度與位元組長度:
結果:
結果:
(3)instr(@username,’民’):尋找某個字元在字串中的位置,如果找到返回此字元的索引,如果沒有找到返回0
例:
顯示結果:
(4)Lpad(@username,10,’要填充的字元’)左填充:將字串按照指定的長度填充到原字串的左邊
顯示結果:
(5)Rpad右填充
顯示結果:
(6)insert 替換字串
例:從第二個字元開始替換兩個字元,替換成‘呵呵’
顯示結果:
(7)strcmp(字串1,字串2)比較兩個字串的大小,按照字典順序去比較
例:
顯示結果:
2.自訂函數:(包括 函數名 函數參數 傳回值 函數體(範圍))
(1)建立函數的文法:
例:
建立簡單函數:
調用簡單函數:
顯示結果:
(2)函數基本文法:
-- 查看所有函數 show functions status;
-- 查看建立函數 show create function test;
-- 刪除函數 drop function test;
例:
查看所有函數:
顯示結果:
(3)複合結構定義文法:
在函數體中,如果包含多條語句,我們需要把多條語句放到BEGIN........END語句塊中
例:
建立函數:
函數建立成功,調用函數:
顯示結果:
四.MySQL資料庫中常見的時間函數
1.常見日期函數:
伺服器三種時區設定:
(1)系統時區---儲存在系統變數system_time_zone
(2)伺服器時區---儲存在全域系統變數global.time_zone
(3)每個用戶端串連的時區---儲存在會話變數session.time_zone
注意:用戶端時區的設定會影響一些日期函數傳回值的顯示,例如:now()、curtime()、curdate(),也影響timestamp列值的顯示。
預設情況下,用戶端和伺服器的時區相同,其值為SYSTEM,表示使用系統時區。
2.返回伺服器目前時間:now([fsp]);返回伺服器目前時間和日期,fsp是指到秒的精確度,取值0~6
例:
(1)now()的顯示格式是:‘YYYY-MM-DD HH:MM:SS’
例:
(2)now()+0的顯示格式是:‘YYYYMMDDHHMMSS’
例:
注意:sysdate()返回伺服器目前時間和日期,與now()的不同點在於:br/>@1.sysdate()返回的是函數的執行時間
比之時間:
3.時間日期計算函數:分別為給定的時間日期加上(add)或減去(sub)一個時間間隔值(expr)
格式:
(1)interval是時間間隔的關鍵字
(2)Expr是一個運算式,對應後面的類型
(3)Unit是時間間隔的單位(間隔類型)(20個),如下:
例1:(目前時間加一天)
例2:(減一天一時一分一秒)
4.個人化顯示日期:
(1)dayofweek(date); -- 一周中的第幾天
(2)Dayofmonth(data); -- 一個中的第幾天
(3)Dayofuyear(date) -- 一年中的第幾天
【本次總結完畢】
Java學習總結(十八)——MySQL資料庫(4)MySQL資料庫中的視圖,函數,預存程序中常見迴圈