MySQL 视图、函数、存储过程、触发器、事件(了解即可) ...

打印 上一主题 下一主题

主题 1108|帖子 1108|积分 3324

1.视图:view


  • 视图就是一张虚拟的表。表是真正存数据的,视图只是显示查询结果。
  • 视图的作用:隐藏表的结构、简化sql嵌套查询操作
注意:视图就是你要查询数据的一个中间结果集,我们一般只用来做数据查询的
创建视图:create view view_name as 查询语句

例如:
  1. 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;
  2. Query OK, 0 rows affected (1.63 sec)
  3. mysql> show tables;
  4. +---------------------+
  5. | Tables_in_hellodb   |
  6. +---------------------+
  7. | classes             |
  8. | coc                 |
  9. | courses             |
  10. | scores              |
  11. | students            |
  12. | teachers            |
  13. | toc                 |
  14. | v_name_course_socre |
  15. +---------------------+
  16. 8 rows in set (0.00 sec)
  17. mysql> select * from v_name_course_socre;
  18. +-------------+----------------+-------+
  19. | name        | course         | score |
  20. +-------------+----------------+-------+
  21. | Shi Zhongyu | Kuihua Baodian |    77 |
  22. | Shi Zhongyu | Weituo Zhang   |    93 |
  23. | Shi Potian  | Kuihua Baodian |    47 |
  24. | Shi Potian  | Daiyu Zanghua  |    97 |
  25. | Xie Yanke   | Kuihua Baodian |    88 |
  26. | Xie Yanke   | Weituo Zhang   |    75 |
  27. | Ding Dian   | Daiyu Zanghua  |    71 |
  28. | Ding Dian   | Kuihua Baodian |    89 |
  29. | Yu Yutong   | Hamo Gong      |    39 |
  30. | Yu Yutong   | Dagou Bangfa   |    63 |
  31. | Shi Qing    | Hamo Gong      |    96 |
  32. | Xi Ren      | Hamo Gong      |    86 |
  33. | Xi Ren      | Dagou Bangfa   |    83 |
  34. | Lin Daiyu   | Taiji Quan     |    57 |
  35. | Lin Daiyu   | Jinshe Jianfa  |    93 |
  36. +-------------+----------------+-------+
  37. 15 rows in set (1.69 sec)
复制代码
删除视图:drop view view_name
  1. mysql> show tables;
  2. +---------------------+
  3. | Tables_in_hellodb   |
  4. +---------------------+
  5. | classes             |
  6. | coc                 |
  7. | courses             |
  8. | scores              |
  9. | students            |
  10. | teachers            |
  11. | toc                 |
  12. | v_name_course_socre |
  13. | v_student           |
  14. +---------------------+
  15. 9 rows in set (0.00 sec)
  16. mysql> drop view v_student;
  17. Query OK, 0 rows affected (0.00 sec)
复制代码
查看创建视图时候用的SQL语句


  • SHOW CREATE VIEW view_name #只能看视图定义
  • SHOW CREATE TABLE view_name # 可以查看表和视图
查看视图属性信息:show table status like 'xxx'
  1. mysql> show table status  like 'v_%'\G
  2. *************************** 1. row ***************************
  3.            Name: v_name_course_socre
  4.          Engine: NULL
  5.         Version: NULL
  6.      Row_format: NULL
  7.            Rows: NULL
  8. Avg_row_length: NULL
  9.     Data_length: NULL
  10. Max_data_length: NULL
  11.    Index_length: NULL
  12.       Data_free: NULL
  13. Auto_increment: NULL
  14.     Create_time: NULL
  15.     Update_time: NULL
  16.      Check_time: NULL
  17.       Collation: NULL
  18.        Checksum: NULL
  19. Create_options: NULL
  20.         Comment: VIEW
  21. 1 row in set (0.00 sec)
复制代码
修改视图:


  • 视图只是一个虚拟的表,本身不存放数据,只是某个select语句的执行结果。
  • 修改视图实际上就是修改后台对应表的数据。
  1. mysql> create view v_student as select * from students;
  2. Query OK, 0 rows affected (0.01 sec)
  3. mysql> select * from v_studet;
  4. ERROR 1146 (42S02): Table 'hellodb.v_studet' doesn't exist
  5. mysql> select * from v_student;
  6. +-------+---------------+-----+--------+---------+-----------+
  7. | StuID | Name          | Age | Gender | ClassID | TeacherID |
  8. +-------+---------------+-----+--------+---------+-----------+
  9. |     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
  10. |     2 | Shi Potian    |  22 | M      |       1 |         7 |
  11. |     3 | Xie Yanke     |  53 | M      |       2 |        16 |
  12. |     4 | Ding Dian     |  32 | M      |       4 |         4 |
  13. |     5 | Yu Yutong     |  26 | M      |       3 |         1 |
  14. |     6 | Shi Qing      |  46 | M      |       5 |      NULL |
  15. |     7 | Xi Ren        |  19 | F      |       3 |      NULL |
  16. |     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
  17. |     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
  18. |    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
  19. |    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
  20. |    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
  21. |    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
  22. |    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
  23. |    15 | Duan Yu       |  19 | M      |       4 |      NULL |
  24. |    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
  25. |    17 | Lin Chong     |  25 | M      |       4 |      NULL |
  26. |    18 | Hua Rong      |  23 | M      |       7 |      NULL |
  27. |    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
  28. |    20 | Diao Chan     |  19 | F      |       7 |      NULL |
  29. |    21 | Huang Yueying |  22 | F      |       6 |      NULL |
  30. |    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
  31. |    23 | Ma Chao       |  23 | M      |       4 |      NULL |
  32. |    24 | Xu Xian       |  27 | M      |    NULL |      NULL |
  33. +-------+---------------+-----+--------+---------+-----------+
  34. 24 rows in set (0.00 sec)
  35. mysql> delete from v_student where StuID=24;
  36. Query OK, 1 row affected (0.11 sec)
  37. mysql> select * from students;
  38. +-------+---------------+-----+--------+---------+-----------+
  39. | StuID | Name          | Age | Gender | ClassID | TeacherID |
  40. +-------+---------------+-----+--------+---------+-----------+
  41. |     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
  42. |     2 | Shi Potian    |  22 | M      |       1 |         7 |
  43. |     3 | Xie Yanke     |  53 | M      |       2 |        16 |
  44. |     4 | Ding Dian     |  32 | M      |       4 |         4 |
  45. |     5 | Yu Yutong     |  26 | M      |       3 |         1 |
  46. |     6 | Shi Qing      |  46 | M      |       5 |      NULL |
  47. |     7 | Xi Ren        |  19 | F      |       3 |      NULL |
  48. |     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
  49. |     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
  50. |    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
  51. |    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
  52. |    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
  53. |    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
  54. |    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
  55. |    15 | Duan Yu       |  19 | M      |       4 |      NULL |
  56. |    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
  57. |    17 | Lin Chong     |  25 | M      |       4 |      NULL |
  58. |    18 | Hua Rong      |  23 | M      |       7 |      NULL |
  59. |    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
  60. |    20 | Diao Chan     |  19 | F      |       7 |      NULL |
  61. |    21 | Huang Yueying |  22 | F      |       6 |      NULL |
  62. |    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
  63. |    23 | Ma Chao       |  23 | M      |       4 |      NULL |
  64. +-------+---------------+-----+--------+---------+-----------+
  65. 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是否可以执行了
例如:
  1. mysql> DELIMITER //
  2. mysql> CREATE FUNCTION deleteById(id SMALLINT UNSIGNED) RETURNS VARCHAR(20)
  3.     -> BEGIN
  4.     ->  DELETE FROM students WHERE stuid = id;
  5.     ->  RETURN (SELECT COUNT(*) FROM students);
  6.     -> END//
  7. ERROR 1304 (42000): FUNCTION deleteById already exists
  8. mysql> DELIMITER ;
  9. mysql> select deleteById(23);
  10. +----------------+
  11. | deleteById(23) |
  12. +----------------+
  13. | 22             |
  14. +----------------+
  15. 1 row in set (0.01 sec)
  16. RETURNS VARCHAR(20) :定义返回值的,定义函数的输出数据的类型
复制代码
3.PROCEDURE 存储过程

作用:和函数的功能差不多,但是函数不能单独作为一个命令来执行。存储过程可以单独作为一个命令来进行执行。
格式:call 需要调用的存储过程
例如:
  1. mysql> delimiter //
  2. mysql> CREATE PROCEDURE selectById(IN id SMALLINT UNSIGNED)
  3.     -> BEGIN
  4.     ->  SELECT * FROM students WHERE stuid = id;
  5.     -> END//
  6. Query OK, 0 rows affected (0.00 sec)
  7. mysql> delimiter ;
  8. mysql> select * from students;
  9. +-------+---------------+-----+--------+---------+-----------+
  10. | StuID | Name          | Age | Gender | ClassID | TeacherID |
  11. +-------+---------------+-----+--------+---------+-----------+
  12. |     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
  13. |     2 | Shi Potian    |  22 | M      |       1 |         7 |
  14. |     3 | Xie Yanke     |  53 | M      |       2 |        16 |
  15. |     4 | Ding Dian     |  32 | M      |       4 |         4 |
  16. |     5 | Yu Yutong     |  26 | M      |       3 |         1 |
  17. |     6 | Shi Qing      |  46 | M      |       5 |      NULL |
  18. |     7 | Xi Ren        |  19 | F      |       3 |      NULL |
  19. |     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
  20. |     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
  21. |    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
  22. |    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
  23. |    12 | Wen Qingqing  |  19 | F      |       1 |      NULL |
  24. |    13 | Tian Boguang  |  33 | M      |       2 |      NULL |
  25. |    14 | Lu Wushuang   |  17 | F      |       3 |      NULL |
  26. |    15 | Duan Yu       |  19 | M      |       4 |      NULL |
  27. |    16 | Xu Zhu        |  21 | M      |       1 |      NULL |
  28. |    17 | Lin Chong     |  25 | M      |       4 |      NULL |
  29. |    18 | Hua Rong      |  23 | M      |       7 |      NULL |
  30. |    19 | Xue Baochai   |  18 | F      |       6 |      NULL |
  31. |    20 | Diao Chan     |  19 | F      |       7 |      NULL |
  32. |    21 | Huang Yueying |  22 | F      |       6 |      NULL |
  33. |    22 | Xiao Qiao     |  20 | F      |       1 |      NULL |
  34. +-------+---------------+-----+--------+---------+-----------+
  35. 22 rows in set (0.00 sec)
  36. mysql> call selectById(2);
  37. +-------+------------+-----+--------+---------+-----------+
  38. | StuID | Name       | Age | Gender | ClassID | TeacherID |
  39. +-------+------------+-----+--------+---------+-----------+
  40. |     2 | Shi Potian |  22 | M      |       1 |         7 |
  41. +-------+------------+-----+--------+---------+-----------+
  42. 1 row in set (0.00 sec)
复制代码
4.TRIGGER 触发器:监控某件事满足条件以后自动执行一些事情

主要是针对数据库据表里的增删改操作,当执行这些操作的时候就触发一个行为。
5.Event 事件

类似于linux里面的计划任务,再某个时间点或者周期执行对应的操作。
注意:事件默认没有开启

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表