1 VIEW 视图

  • 视图:虚拟表,保存有实表的查询结果

1.1 创建视图

  • 创建方法
CREATE VIEW view_name [(column_list)]AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
CREATE VIEW <视图名> AS <SELECT语句> #上述解释
WITH CHECK OPTION 的意思是,修改视图时,检查插入的数据是否符合 WHERE 设置的条件
  • <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
  • <SELECT语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。

示例:

MariaDB [hellodb]> create view view_classes as select *from classes;
Query OK, 0 rows affected (0.00 sec)MariaDB [hellodb]> SHOW CREATE VIEW view_classes\G;
*************************** 1. row ***************************View: view_classes        #view <name>Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_classes` AS select `classes`.`ClassID` AS `ClassID`,`classes`.`Class` AS `Class`,`classes`.`NumOfStu` AS `NumOfStu` from `classes`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

1.2 查看视图定义

 SHOW CREATE VIEW view_name #只能看视图定义SHOW CREATE TABLE view_name # 可以查看表和视图

示例:

  MariaDB [hellodb]> SHOW CREATE VIEW view_classes\G;
*************************** 1. row ***************************View: view_classes        #view <name>Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_classes` AS select `classes`.`ClassID` AS `ClassID`,`classes`.`Class` AS `Class`,`classes`.`NumOfStu` AS `NumOfStu` from `classes`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)MariaDB [hellodb]> show create table view_classes\G;
*************************** 1. row ***************************View: view_classesCreate View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_classes` AS select `classes`.`ClassID` AS `ClassID`,`classes`.`Class` AS `Class`,`classes`.`NumOfStu` AS `NumOfStu` from `classes`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

1.3 删除视图

语法:

DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]

注意:视图中的数据事实上存储于“基表”中,因此,其修改操作也会针对基表实现;其修改操作受基表限制

2 FUNCTION 函数

  • 函数:分为系统函数和自定义函数
  • 系统函数参考:
    https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html
  • 自定义函数:user-defined function UDF,保存在mysql.proc表中

2.1 创建UDF语法

CREATE [AGGREGATE] FUNCTION function_name(parameter_name type,[parameter_nametype,...])RETURNS {STRING|INTEGER|REAL}runtime_body

说明:
参数可以有多个,也可以没有参数
必须有且只有一个返回值
#

2.2 查看函数列表

SHOW FUNCTION STATUS;

2.3 查看函数定义

SHOW CREATE FUNCTION function_name;

2.4 删除UDF

DROP FUNCTION function_name;

2.5 调用自定义函数语法

SELECT function_name(parameter_value,.......)

范例:

#无参UDF
CREATE FUNCTION simpleFun() RETURNS VARCHAR(20) RETURN "Hello World";
#有参数UDF
DELIMITER //
CREATE FUNCTION deleteById(id SMALLINT UNSIGNED) RETURNS VARCHAR(20)
BEGIN
DELETE FROM students WHERE stuid = id;
RETURN (SELECT COUNT(*) FROM students);
END//
DELIMITER ;

2.5.1 MySQL中的变量

两种变量:系统变量和用户自定义变量

2.5.1.1 系统变量:MySQL数据库中内置的变量,可用@@var_name引用
  • 用户自定义变量分为以下两种:

    • 普通变量:在当前会话中有效,可用@var_name引用
    • 局部变量:在函数或存储过程内才有效,需要用DECLARE 声明,之后直接用 var_name引用
2.5.1.2 自定义函数中定义局部变量语法
DECLARE 变量1[,变量2,... ]变量类型 [DEFAULT 默认值]

说明:局部变量的作用范围是在BEGIN…END程序中,而且定义局部变量语句必须在BEGIN…END的第一行定义
范例:

DELIMITER //
CREATE FUNCTION addTwoNumber(x SMALLINT UNSIGNED, y SMALLINT UNSIGNED)
RETURNS SMALLINT
BEGIN
DECLARE a, b SMALLINT UNSIGNED;
SET a = x, b = y;
RETURN a+b;
END//
DELIMITER ;
2.5.1.3 为变量赋值语法
SET parameter_name = value[,parameter_name = value...]
SELECT INTO parameter_name

范例:

DECLARE x int;
SELECT COUNT(*) FROM tdb_name INTO x;
RETURN x;
END//

3 TRIGGER触发器

触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行

3.1 创建触发器

语法:

CREATE [DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
trigger_body ?
**说明:**
trigger_name:触发器的名称 #
trigger_time:{ BEFORE | AFTER },表示在事件之前或之后触发 #
trigger_event::{ INSERT |UPDATE | DELETE },触发的具体事件 #
tbl_name:该触发器作用在表名#

范例:

CREATE TABLE student_info (
stu_id INT(11) NOT NULL AUTO_INCREMENT ,
stu_name VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (stu_id)
);CREATE TABLE student_count (
student_count INT(11) DEFAULT 0
);
INSERT INTO student_count VALUES(0);CREATE TRIGGER trigger_student_count_insert
AFTER INSERT
ON student_info FOR EACH ROW
UPDATE student_count SET student_count=student_count+1;CREATE TRIGGER trigger_student_count_delete
AFTER DELETE
ON student_info FOR EACH ROW
UPDATE student_count SET student_count=student_count-1;

3.2 查看触发器

#在当前数据库对应的目录下,可以查看到新生成的相关文件:trigger_name.TRN,table_name.TRG
SHOW TRIGGERS
#查询系统表information_schema.triggers的方式指定查询条件,查看指定的触发器信息。
USE information_schema;
SELECT * FROM triggers WHERE trigger_name='trigger_student_count_insert';

3.3 删除触发器

DROP TRIGGER trigger_name;

初探MySQL的语句之二相关推荐

  1. mysql基本语句实验二 修改表的结构-- 1、修改数据库-- 修改实验一中创建的学生管理数据库studentmanager的字符集为gbk。

    -- 1.修改数据库 -- 修改实验一中创建的学生管理数据库studentmanager的字符集为gbk. alter database studentmanager DEFAULT CHARACTE ...

  2. MySQL优化系列(二)--查找优化(1)(非索引设计)

    MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...

  3. MySQL语法语句大全

    MySQL语法语句大全 一.SQL速成   ; B/ X* Q; t/ W) v" ]结构查询语言(SQL)是用于查询关系数据库的标准语言,它包括若干关键字和一致的语法,便于数据库元件(如表 ...

  4. php数据库访问辅助类,php+MySQL实战案例【二】php数据库辅助类

    前言 在学习php的时候需要经常对mysql数据库进行增删改查操作,为了减少冗余代码,我们把数据操作的方法封装成一个php类.在不同的业务场景需要用到数据库表的数据操作时,只需在php文件开头引入我们 ...

  5. 大数据WEB阶段(六)MySql详解(二)

    MySql详解(二) 一.分组查询 语法: select col_name1,col_name2... from tb_name group by having ...; 练习: 执行下面的SQL,创 ...

  6. php面试专题---MYSQL查询语句优化

    php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...

  7. mysql 查询语句_MySQL相关(一)- 一条查询语句是如何执行的

    前言 学习一个新知识最好的方式就是上官网,所以我先把官网贴出来 MySQL官网 (点击查阅),如果大家有想了解我没有说到的东西可以直接上官网看哈~目前 MySQL 最新大版本为8.0,但是鉴于目前应用 ...

  8. mysql查询语句详解_基于mysql查询语句的使用详解

    1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ...

  9. linux mysql select_MySQL-Select语句高级应用

    阅读目录 1.1 SELECT高级应用 1.2 select中where子句使用 1.3 select中ORDER BY子句 1.4 LIMIT子句 1.5 多表连接查询 1.6 Informatic ...

  10. Docker最全教程之MySQL容器化 (二十四)

    Docker最全教程之MySQL容器化 (二十四) 原文:Docker最全教程之MySQL容器化 (二十四) 前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过 ...

最新文章

  1. 【青少年编程】黄羽恒:加减乘除法小测试
  2. linux下的主要目录
  3. JS中避免命名冲突的三个方法
  4. 假设以带头结点的循环链表表示队列_[leetcode链表系列]2 删除链表中的节点
  5. Java黑皮书课后题第8章:*8.16(对二维数组排序)编写一个方法,使用下面的方法头对二维数组排序。这个方法首先按行排序,然后按列排序
  6. MFC获取键盘光标和鼠标光标所在控件的ID
  7. weak password
  8. JZOJ 3456. 【NOIP2013模拟联考3】恭介的法则(rule)
  9. 软件测试52讲-测试新技术篇
  10. 网易云系列爬虫-采集歌单内歌曲热评
  11. 自然语言处理技术之准确率(Precision)、召回率(Recall)、F值(F-Measure)简介
  12. DHCP报文分析及C/C++代码实现
  13. cad2020直装版无需注册机
  14. linux终端解微分方程,解微分方程+ode求解器
  15. 十大著名黑客——李纳斯-托瓦兹
  16. PMP认证考试答题应试技巧
  17. debian11安装samba(smb)协议的网络共享
  18. 固话号码认证有什么好处?固话号码认证有什么作用?
  19. Navicat Premium教程|Navicat Premium怎么用?
  20. shsh备份工具_升级iOS13上当,这个工具可以随机降级系统

热门文章

  1. 高度坍塌的几种解决方法
  2. python爬虫之QQ空间登陆获取信息(超级详细)
  3. java贪吃蛇课程设计知乎_Java课程设计---贪吃蛇大作战
  4. LZY最喜欢的思维题
  5. vue封装了个日历组件(包含农历,节日)
  6. 看完这篇就够了,mac版本最新Camera Raw 15.1 新功能HDR详解
  7. 清理谷歌浏览器注册表_win10注册表chrome残留无法删除如何解决
  8. mysql校对集_MySQL校对集问题
  9. vue脚手架安装步骤详情
  10. 程序员如何向领导提涨薪加薪