Java學習總結(十八)——MySQL資料庫(4)MySQL資料庫中的視圖,函數,預存程序中常見迴圈

來源:互聯網
上載者:User

標籤: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資料庫中的視圖,函數,預存程序中常見迴圈

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.