视图、存储过程、触发器

  • 视图
  • 1、概念
  • 2、使用
  • 3、作用
  • 备份恢复
  • 1、备份
  • 2、恢复
  • 存储过程
  • 1、概念
  • 2、使用
  • 3、变量
  • 4、参数
  • 5、常用语句
  • 6、函数区别
  • 触发器
  • 1、概念
  • 2、作用
  • 3、insert
  • 4、update
  • 5、delete


视图

1、概念

  一种虚拟的表,并不是在数据库中实际存在的,本质就是指行select语句后返回的结果

2、使用

(1)增
  CREATE VIEW 视图名称 [(列名列表)] AS 查询语句;
(2)删
  DROP VIEW [IF EXISTS] 视图名称;
(3)改
  a) 修改视图结构:
    ALTER VIEW 视图名称 (列名列表) AS 查询语句;
  b) 修改视图数据:
    UPDATE 视图名称 SET 列名=值 WHERE 条件;
(4)查
  SELECT * FROM 视图名称;
(5)注意:
  修改视图数据之后,源表中的数据也会跟着修改

3、作用

(1)简化查询
  使用视图的用户不需要关心相应的表结构、关联条件等,视图就是他们想要的结果
(2)安全
  使用视图的用户只能访问被允许查询的结果,这样可以限制用户访问一些敏感的信息列

备份恢复

1、备份

(1)远程连接虚拟机,输入命令。
  命令格式:mysqldump -u 用户名 -p 待备份数据库名 > sql文件保存的地址
  例如:mysqldump -u root -p db5 > /root/db5.sql 需要输入mysql的密码
(2)进入文件保存路径,查看文件是否存在 cat /root/db5.sql

2、恢复

(1)登录mysql mysql -uroot -p
(2)查看所有的数据库 show databases;
(3)删除已经备份的数据库 drop database db5;
(4)创建一个同名的新的数据库 create database db5;
(5)使用这个数据库 use db5;
(6)恢复备份的数据库 source /root/db5.sql;
(7)查看下是否恢复成功 show tables;

存储过程

1、概念

  一组为了完成特定功能的sql语句集,存储在数据库中,一次编译永久有效,用户可以通过指定的存储过程的名称来执行它,类似java中的方法,先定义,然后就可以调用的

2、使用

(1)定义

-- 修改分隔符为$
DELIMITER $
-- 标准语法
CREATE PROCEDURE 存储过程名称(参数列表)
BEGIN
	SQL 语句列表;
	.
	.
END$
-- 修改分隔符为分号
DELIMITER ;

(2)调用
  CALL 存储过程名称(实际参数);

3、变量

(1)定义
  DECLARE 变量名 数据类型 [DEFAULT 默认值];
(2)赋值
  a) set设置:SET 变量名 = 变量值;
  b) into设置:SELECT 列名 INTO 变量名 FROM 表名 [WHERE 条件];
(3)使用
  SELECT 变量名;

4、参数

5、常用语句

(1)if语句:
  IF 判断条件1 THEN 执行的sql语句1;
  [ELSEIF 判断条件2 THEN 执行的sql语句2;]
  …
  [ELSE 执行的sql语句n;]
  END IF;
(2)while循环:
  初始化语句;
  WHILE 条件判断语句 DO
    循环体语句;
    条件控制语句;
  END WHILE;

6、函数区别

#创建存储函数
CREATE FUNCTION 函数名称([参数 数据类型])
RETURNS 返回值类型
BEGIN
	#执行的sql语句;
	RETURN 结果;
END$
	
#调用函数
SELECT 函数名称(实际参数);

触发器

1、概念

  触发器是与特定数据表相关联的存储过程。当相应的数据表被INSERT , DELETE , UPDATE 语句修改时,触发器将自动执行。触发器可以被设置在语句执行之前或之后触发。
  特点:灵活,但是不易维护,并且移植性比较差

2、作用

(1)触发器可以检查或修改新数据值,这意味着我们可以利用触发器强制实现数据完整性,比如检查某个百分比数值是否在0-100之间,还可以用来对输入数据进行必要的过滤;
(2)触发器可以将表达式的结果赋值给数据列作为默认值。因此我们可以绕开数据列定义里的默认值必须为常数的限制;
(3)触发器可以在删除或修改数据行之前先检查它的当前内容。利用这种能力可以实现许多功能,比如把对现有数据的修改记载到一个日志里。

3、insert

CREATE TRIGGER 触发器名称  #触发器名称
AFTER 					 #什么时候执行触发器
INSERT                   #什么动作执行触发器
ON 表名                   #关联数据的表名
FOR EACH ROW             #触发器要做的事情
BEGIN
	#触发器要执行的功能;
	..........
END$

4、update

CREATE TRIGGER 触发器名称
AFTER UPDATE
ON 表名
FOR EACH ROW
BEGIN
	#触发器要执行的功能;
	.......
END$

5、delete

CREATE TRIGGER 触发器名称
AFTER DELETE
ON 表名
FOR EACH ROW
BEGIN
	#触发器要执行的功能;
	........
END$