MySQL 視圖、函數、存儲過程、觸發器、事件(瞭解即可)

来源:https://www.cnblogs.com/heyongshen/archive/2022/09/10/16675837.html
-Advertisement-
Play Games

1.視圖:view 視圖就是一張虛擬的表。表是真正存數據的,視圖只是顯示查詢結果。 視圖的作用:隱藏表的結構、簡化sql嵌套查詢操作 註意:視圖就是你要查詢數據的一個中間結果集,我們一般只用來做數據查詢的 創建視圖:create view view_name as 查詢語句 例如: mysql> c ...


1.視圖:view
  • 視圖就是一張虛擬的表。表是真正存數據的,視圖只是顯示查詢結果。

  • 視圖的作用:隱藏表的結構、簡化sql嵌套查詢操作

註意:視圖就是你要查詢數據的一個中間結果集,我們一般只用來做數據查詢的

創建視圖:create view view_name as 查詢語句

例如:

mysql> create view v_name_course_socre as select  st.name,co.course,sc.score  from students st inner join scores sc on st.StuID=sc.StuID inner join courses co on  sc.courseid=co.courseid;
Query OK, 0 rows affected (1.63 sec)

mysql> show tables;
+---------------------+
| Tables_in_hellodb   |
+---------------------+
| classes             |
| coc                 |
| courses             |
| scores              |
| students            |
| teachers            |
| toc                 |
| v_name_course_socre |
+---------------------+
8 rows in set (0.00 sec)

mysql> select * from v_name_course_socre;
+-------------+----------------+-------+
| name        | course         | score |
+-------------+----------------+-------+
| Shi Zhongyu | Kuihua Baodian |    77 |
| Shi Zhongyu | Weituo Zhang   |    93 |
| Shi Potian  | Kuihua Baodian |    47 |
| Shi Potian  | Daiyu Zanghua  |    97 |
| Xie Yanke   | Kuihua Baodian |    88 |
| Xie Yanke   | Weituo Zhang   |    75 |
| Ding Dian   | Daiyu Zanghua  |    71 |
| Ding Dian   | Kuihua Baodian |    89 |
| Yu Yutong   | Hamo Gong      |    39 |
| Yu Yutong   | Dagou Bangfa   |    63 |
| Shi Qing    | Hamo Gong      |    96 |
| Xi Ren      | Hamo Gong      |    86 |
| Xi Ren      | Dagou Bangfa   |    83 |
| Lin Daiyu   | Taiji Quan     |    57 |
| Lin Daiyu   | Jinshe Jianfa  |    93 |
+-------------+----------------+-------+
15 rows in set (1.69 sec)
刪除視圖:drop view view_name
mysql> show tables;
+---------------------+
| Tables_in_hellodb   |
+---------------------+
| classes             |
| coc                 |
| courses             |
| scores              |
| students            |
| teachers            |
| toc                 |
| v_name_course_socre |
| v_student           |
+---------------------+
9 rows in set (0.00 sec)

mysql> drop view v_student;
Query OK, 0 rows affected (0.00 sec)

查看創建視圖時候用的SQL語句
  • SHOW CREATE VIEW view_name #只能看視圖定義

  • SHOW CREATE TABLE view_name # 可以查看表和視圖

查看視圖屬性信息:show table status like 'xxx'
mysql> show table status  like 'v_%'\G
*************************** 1. row ***************************
           Name: v_name_course_socre
         Engine: NULL
        Version: NULL
     Row_format: NULL
           Rows: NULL
 Avg_row_length: NULL
    Data_length: NULL
Max_data_length: NULL
   Index_length: NULL
      Data_free: NULL
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: NULL
       Checksum: NULL
 Create_options: NULL
        Comment: VIEW
1 row in set (0.00 sec)
修改視圖:
  • 視圖只是一個虛擬的表,本身不存放數據,只是某個select語句的執行結果。

  • 修改視圖實際上就是修改後臺對應表的數據。

mysql> create view v_student as select * from students;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from v_studet;
ERROR 1146 (42S02): Table 'hellodb.v_studet' doesn't exist
mysql> select * from v_student;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     3 | Xie Yanke     |  53 | M      |       2 |        16 |
|     4 | Ding Dian     |  32 | M      |       4 |         4 |
|     5 | Yu Yutong     |  26 | M      |       3 |         1 |
|     6 | Shi Qing      |  46 | M      |       5 |      NULL |
|     7 | Xi Ren        |  19 | F      |       3 |      NULL |
|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
|    15 | Duan Yu       |  19 | M      |       4 |      NULL |
|    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
|    17 | Lin Chong     |  25 | M      |       4 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
|    20 | Diao Chan     |  19 | F      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
|    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
+-------+---------------+-----+--------+---------+-----------+
24 rows in set (0.00 sec)

mysql> delete from v_student where StuID=24;
Query OK, 1 row affected (0.11 sec)

mysql> select * from students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     3 | Xie Yanke     |  53 | M      |       2 |        16 |
|     4 | Ding Dian     |  32 | M      |       4 |         4 |
|     5 | Yu Yutong     |  26 | M      |       3 |         1 |
|     6 | Shi Qing      |  46 | M      |       5 |      NULL |
|     7 | Xi Ren        |  19 | F      |       3 |      NULL |
|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
|    15 | Duan Yu       |  19 | M      |       4 |      NULL |
|    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
|    17 | Lin Chong     |  25 | M      |       4 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
|    20 | Diao Chan     |  19 | F      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
|    23 | Ma Chao       |  23 | M      |       4 |      NULL |
+-------+---------------+-----+--------+---------+-----------+
23 rows in set (0.00 sec)

2.MySQL函數:FUNCTION

MySQL的函數分為內置函數和自定義函數。

內置函數查看:

https://dev.mysql.com/doc/refman/8.0/en/sql-function-reference.html
https://dev.mysql.com/doc/refman/5.7/en/sql-function-reference.html

自定義函數:

create function fun_name((parameter_name data_type,...,parameter_name data_type);

註意:
  • begin-end用於定義一組語句塊

  • delimiter:mysql的分隔符,mysql客戶端中預設是分號(;)。告訴mysql解釋器,該段命令是否已經結束了,mysql是否可以執行了

例如:

mysql> DELIMITER //
mysql> CREATE FUNCTION deleteById(id SMALLINT UNSIGNED) RETURNS VARCHAR(20) 
    -> BEGIN
    ->  DELETE FROM students WHERE stuid = id;
    ->  RETURN (SELECT COUNT(*) FROM students);
    -> END//
ERROR 1304 (42000): FUNCTION deleteById already exists
mysql> DELIMITER ;
mysql> select deleteById(23);
+----------------+
| deleteById(23) |
+----------------+
| 22             |
+----------------+
1 row in set (0.01 sec)

RETURNS VARCHAR(20) :定義返回值的,定義函數的輸出數據的類型

3.PROCEDURE 存儲過程

作用:和函數的功能差不多,但是函數不能單獨作為一個命令來執行。存儲過程可以單獨作為一個命令來進行執行。

格式:call 需要調用的存儲過程

例如:

mysql> delimiter //
mysql> CREATE PROCEDURE selectById(IN id SMALLINT UNSIGNED)
    -> BEGIN
    ->  SELECT * FROM students WHERE stuid = id;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> select * from students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     3 | Xie Yanke     |  53 | M      |       2 |        16 |
|     4 | Ding Dian     |  32 | M      |       4 |         4 |
|     5 | Yu Yutong     |  26 | M      |       3 |         1 |
|     6 | Shi Qing      |  46 | M      |       5 |      NULL |
|     7 | Xi Ren        |  19 | F      |       3 |      NULL |
|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
|    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
|    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
|    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
|    15 | Duan Yu       |  19 | M      |       4 |      NULL |
|    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
|    17 | Lin Chong     |  25 | M      |       4 |      NULL |
|    18 | Hua Rong      |  23 | M      |       7 |      NULL |
|    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
|    20 | Diao Chan     |  19 | F      |       7 |      NULL |
|    21 | Huang Yueying |  22 | F      |       6 |      NULL |
|    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
+-------+---------------+-----+--------+---------+-----------+
22 rows in set (0.00 sec)

mysql> call selectById(2);
+-------+------------+-----+--------+---------+-----------+
| StuID | Name       | Age | Gender | ClassID | TeacherID |
+-------+------------+-----+--------+---------+-----------+
|     2 | Shi Potian |  22 | M      |       1 |         7 |
+-------+------------+-----+--------+---------+-----------+
1 row in set (0.00 sec)
4.TRIGGER 觸發器:監控某件事滿足條件以後自動執行一些事情

主要是針對資料庫據表裡的增刪改操作,當執行這些操作的時候就觸發一個行為。

5.Event 事件

類似於linux裡面的計劃任務,再某個時間點或者周期執行對應的操作。

註意:事件預設沒有開啟


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、Map的使用 前面我們在Mapper介面的方法中,傳入的參數都是一個基本類型或者是一個實體類,那麼如果我們需要的參數不止一個但又用不到實體類所有的屬性有沒有什麼更好的辦法呢,這裡我們就可以用到Map了。 我們還是以具體的操作來進行理解。 1.利用Map實現查詢 (1)修改UserMapper介面 ...
  • 一、什麼是索引 在mysql中,索引是一種特殊的資料庫結構,由數據表中的一列或多列組合而成,可以用來快速查詢數據表中有某一特定值的記錄。通過索引,查詢數據時不用讀完記錄的所有信息,而只是查詢索引列即可,索引是幫助Mysql高效獲取數據且以排好序的數據結構,直觀的說,索引就類似書的目錄頁,沒有目錄(即 ...
  • 查找 二分查找 時間複雜度:O (logN) 說明:取數組中間的值和查找值進行比較、如果 中間的值大於要查找的值、則高位索引往中間索引-1、小於則是低位索引往上提、即中間索引+1、一直迴圈直至找到值、最後沒有找到則返回-1 /** * 二分查找法 * @return 返回查找的索引、沒有則返回-1 ...
  • 題目 中文 實現一個以 T 作為泛型參數的 IsNever類型. 如果 T 是never, 返回 true, 否則返回 false. 示例: type A = IsNever<never>; // expected to be true type B = IsNever<undefined>; // ...
  • ▶ 簡介 aardio 可以非常方便地調用 .NET( 不需要任何複雜的步驟 )。 .NET 在 aardio 中很好用,系統自帶 .NET 組件以及各種開源 .NET 組件在 aardio 用戶中也很受歡迎。 aardio + .NET 生成的 EXE —— 可避免被 ILSpy 直接反編譯。 a ...
  • 要說捲,每分鐘轉xx圈,誰還能有它“捲”?! 要說捲, “承包”工業能耗30%, 雙碳壓力下,誰能有它非捲不可的壓力?! 要說捲,工業、汽車、航天、醫療……生活中處處有它的身影,更擔當決定性的角色,能不捲? 作為近代人類文明發展的重要推動力,電機在如今的社會中幾乎無處不在,為現代生活的大量基礎應用提 ...
  • 一、下載安裝包 archlinux-x86_64.iso 下載傳送門:Arch Linux BitTorrent Download 是磁鏈和種子下載,往下拉,找到 HTTP Direct Downloads , 選擇 China ,選擇適合自己的國內鏡像進行下載 Vmware 下載傳傳送門:VMwa ...
  • 1.俄羅斯延長接受簡化版認證流程的日期 2022年8月31日,俄羅斯聯邦政府發佈了第1255號法令,主題為“關於第353號法令附錄18的修正”,主要內容是俄羅斯延長接受“簡化版認證流程”的日期,從2022年9月1日延長至2023年9月1日為止。該法令發佈後立即生效。 “簡化版認證流程”的相關細則可以 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...