MYSQL视图和mysql触发器(学会并使用day6)

news2025/1/15 6:46:29

MYSQL视图和mysql触发器

  • MYSQL视图
    • 使用视图的原因
    • 视图作用
    • 视图规则和限制
    • 视图的应用
    • 实际操作
      • 创建表并查看
      • 创建视图
      • 视图记录修改
      • 修改视图
  • mysql触发器
      • 创建触发器
      • employee表
      • employee02表
      • 创建一个触发器t1
      • 更新语句并查看employee02表
      • 删除触发器
      • 查询触发器
      • 触发器类型OLD和NEW

MYSQL视图

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

视图是一个虚拟表,本身并不包含数据。作为一个select语句保存在数据字典中的。它是sql的查询结果,其内容由查询定义。是从另外一个角度看待原表。同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insert update delete ] ;

使用视图的原因

使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

使用视图的用户只能访问他们被允许· 查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。

一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

使用视图的大部分情况是为了保障数据安全性,提高查询效率。

视图作用

  • 重复利用SQL语句
  • 简化SQL查询,快速取数据
  • 只用知道表的部分结构
  • 保护数据,根据特定授权
  • 更改数据格式和表示,视图可返回与底层表的表示和格式不同的数据
    视图只是用来查看存储在别处的数据的设施,本身不包含数据,返回的数据也是从其他表检索出来的。

视图规则和限制

  • 与表一样,命名必须是唯一的(不能出现同名视图或表名)。
  • 创建视图数目无限制,但是要考虑复杂查询创建为视图之后的性能影响。
  • 视图不能添加索引,也不能有关联的触发器或者默认值。
  • 视图可以提高安全性,必须具有足够的访问权限。
  • order by可用在视图中,但是如果从该视图检索数据select中含有order by ,那么该视图中的order by将被覆盖。
  • 视图可以和表一起使用。

视图的应用

  1. 权限控制时使用

    如某几个列,允许用户查询,其他列不允许查询

    可以通过视图,开放其中几列查询,起到权限控制作用

  2. 简化复杂查询时使用

    查询每个栏目下商品的平均价格,并按平均价格排序,查询出平均价格前3的栏目等使用。

  3. 视图能不能更新,删除,添加

    如果视图的每一行,是与物理表一 一对应的则可以

    视图的行是由物理表多行经过计算得到的结果,视图不可以更新的。

实际操作

创建表并查看

CREATE TABLE IF NOT EXISTS employee(
id int(11) auto_increment PRIMARY key,
name VARCHAR(22),
age int(4),
money int(20)
);

INSERT into employee VALUES(null,"张三",20,3650);
INSERT into employee VALUES(null,"李四",30,4502);
INSERT into employee VALUES(null,"王二",30,3650);
INSERT into employee VALUES(null,"麻子",50,8885);
INSERT into employee VALUES(null,"小红",20,4445);

SELECT * from employee;

在这里插入图片描述

创建视图

创建语法

-- CREATE VIEW <视图名> AS (SELECT语句)

<视图名>:指定视图的名称。该名称在数据库中必须是唯一的,
不能与其他表或视图同名。
<SELECT 语句>:指定创建视图的 SELECT 语句,
可用于查询多个基础表或源视图。


-- 查看视图
select * from 视图名

生成视图并查看视图

CREATE view emp_view as(SELECT * from employee where money>4000);
SELECT * from emp_view ;

在这里插入图片描述

视图记录修改

修改语法

-- update 数据库表名 set 字段名1=字段值1,字段名2=字段值2,
...字段名n=字段值n where 条件表达式; #和表的修改一样
update ss set username='cl' where userId=2;

-- 注意:修改了视图的数据记录,对基表数据也有影响

修改视图,并查看基表和视图


UPDATE emp_view set money=9000 WHERE money>8000;
SELECT * from emp_view ;
SELECT * from employee;

视图发生变化
在这里插入图片描述
基表也发生变化
在这里插入图片描述

修改视图

格式:
alter view 视图名称 as select 语句;
或
alter view 视图名称 as select 视图;
或
create or replace view  视图名  as  select 字段名 from 表名;

视图重命名:
rename table 视图名 to 新视图名;

第一种

alter view emp_view as (SELECT * from employee where id>3);
SELECT * from emp_view;

在这里插入图片描述
第二种

CREATE VIEW emp_view02 AS SELECT * FROM employee WHERE id<3;
rename table emp_view02 to emp_view03;
SELECT * from emp_view03;

在这里插入图片描述

mysql触发器

触发器(TRIGGER)是由事件来触发某个操作。这些事件包括insert语句、update语句和delete语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。

触发器是由insert、update和delete等事件来触发某种特定操作。满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。这样做可以保证某些操作之间的一致性。

创建触发器

语法

CREATE TRIGGER  -- 触发器名称
BEFORE/AFTER  -- (二选一,表示在事件之前执行还是事件之后执行)
UPDATE/INSERT/DELETE -- (三选一,指定在什么事件触发触发器,即增,删,改)
ON 表名称 
FOR EACH ROW  -- (影响所有行) 
#触发器主体
sql语句;

employee表

CREATE TABLE IF NOT EXISTS employee(
id int(11) auto_increment PRIMARY key,
name VARCHAR(22),
age int(4),
money int(20)
);

INSERT into employee VALUES(null,"张三",20,3650);
INSERT into employee VALUES(null,"李四",30,4502);
INSERT into employee VALUES(null,"王二",30,3850);
INSERT into employee VALUES(null,"麻子",50,8885);
INSERT into employee VALUES(null,"小红",20,4445);

employee02表

CREATE TABLE IF NOT EXISTS employee02(
id int(11) auto_increment PRIMARY key,
name VARCHAR(22),
age int(4),
money int(20)
);

创建一个触发器t1

CREATE TRIGGER t1 before update on 
employee for each row insert into 
employee02 VALUES(null,"鲍勃",20,4445);

每当执行一次更新employee表的操作时,在更新之前都会向employee02表插入一条姓名为"鲍勃",年龄为20,ID为4445的固定记录。

更新语句并查看employee02表

UPDATE  employee set money=500 where money=4502;
SELECT * from employee02;

在这里插入图片描述

删除触发器

#删除触发器T1
DROP TRIGGER IF EXISTS T1;

查询触发器

#在已知数据库内,查询触发器
SHOW TRIGGERS;

触发器类型OLD和NEW

在触发器中,OLD和NEW是用来引用行数据的特殊关键字。
OLD关键字表示触发器中被修改的行的原有数据。当在触发器中使用OLD关键字时,可以引用被修改行的旧值。
NEW关键字表示触发器中被修改的行的新数据。当在触发器中使用NEW关键字时,可以引用被修改行的新值。
这些关键字通常在触发器中与BEFORE或AFTER结合使用,用于引用触发器所针对的行的旧值和新值。

CREATE TRIGGER t4 after update on employee for each row 
insert into employee03 VALUES(NEW.id,NEW.name,NEW.age,NEW.money);

这是一个"after update"触发器,表示在执行更新操作之后触发。每次更新"employee"表中的一行数据时,该触发器将会执行。

触发器中的代码将使用关键字NEW来引用被更新的行的新值,并将这些新值插入到"employee03"表中的一条新行中。

CREATE TRIGGER t3 before update on employee for each row 
insert into employee03 VALUES(OLD.id,OLD.name,OLD.age,OLD.money);

这是一个"before update"触发器,表示在执行更新操作之前触发。每次更新"employee"表中的一行数据时,该触发器将会执行。

触发器中的代码将使用关键字OLD来引用被更新的行的旧值,并将这些旧值插入到"employee03"表中的一条新行中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/830226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用户体验旅程图:改进用户体验的好工具

用户体验旅程图&#xff1a;改进用户体验的好工具 怎么改进体验&#xff0c;是有方法的 用户情绪曲线来衡量用户感觉 趣讲大白话&#xff1a;没有流程刨析&#xff0c;就没法改进 【趣讲信息科技245期】 **************************** 企业管理需要基本的流程的 企业流程简称BP…

“中国网安企业出海20强” | 赛宁网安持续领航国际市场

​​8月2日&#xff0c;斯元商业咨询机构基于对网安行业长期研究数据和公开调研&#xff0c;正式发布了「China’s Top 20 Cybersecurity Tech Going Global」&#xff08;「中国网络安全企业出海20强」&#xff09;研究报告&#xff08;以下简称TOP20报告&#xff09;。 “TO…

【MYSQL】MYSQL学习笔记【基础篇】【未完待续】

文章目录 MYSQL入门一、MYSQL概述1. 数据库相关概念1.1 数据库&#xff0c;数据库管理系统与SQL1.2 数据库种类以及主流数据库管理系统排名1.3 MySQL数据库安装1.4 数据模型 二、SQL2.1 通用语法与注释2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作2.3.2.1 表操作-查询创建2…

UIAutomator2安装及连接手机,我踩的坑都在这儿了

一、大致步骤 大家搜索网络教程&#xff0c;都会看到差不多的安装步骤&#xff1a; 1、本人使用的python3.11 2、OPPO手机 3、安装UIAutomator2&#xff1a; 在命令行中输入&#xff1a;pip install --pre uiautomator2 4、安装配置adb 安装window上&#xff08;其他的自…

excal中遇到数据变成科学计数法的处理方法

1、单元格宽度太小&#xff08;解决办法增加单元格的宽度&#xff09; 2、通过设置单元格格式里面调整 #;#;0;G/通用格式

Python毕业设计 抖音短视频数据分析与可视化 - python 大数据 可视化

文章目录 0 前言1 课题背景2 数据清洗3 数据可视化地区-用户观看时间分界线每周观看观看路径发布地点视频时长整体点赞、完播 4 进阶分析相关性分析留存率 5 深度分析客户价值判断 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕…

Python实现猫狗分类

不废话了&#xff0c;直接上代码&#xff1a; def load_imagepath_from_csv(csv_name):image_path []with open(csv_name,r) as file:csv_reader csv.reader(file)next(csv_reader)for row in csv_reader:image_path.append(row[0])return image_pathimport csv csv_name &…

如何监控制造业精密空调?看这技能就够了!

在半导体制造、电子元件生产、光学设备制造等领域&#xff0c;精密空调监控是关键的保障&#xff0c;因为微小的温度或湿度变化、微生物或颗粒物污染都可能对产品质量和性能造成巨大影响。 精密空调监控系统作为一种高度智能化的解决方案&#xff0c;能够实时监测和调节生产环境…

IIS站点无法启动,万维网发布服务无法开机启动

对于 IIS 站点无法启动和万维网发布服务无法自动启动的问题&#xff0c;你可以尝试以下的注册表设置修改&#xff1a; 1.启动类型设置&#xff1a; 打开注册表编辑器&#xff0c;导航至以下路径&#xff1a;HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Services\W3SVC 确保在右…

【参赛送好礼】2023 云原生编程挑战赛·赛道 3 赛题解析助您快速 get 参赛技能

大赛介绍 第四届云原生编程挑战赛&#xff0c;是由阿里云主办&#xff0c;云原生应用平台、天池联合承办的云原生著名品牌赛事。 自 2015 年开始&#xff0c;大赛已经成功举办了八届&#xff0c;并从 2020 年开始升级为首届云原生编程挑战赛&#xff0c;共吸引了超过 53000 支…

18、springboot默认的配置文件及导入额外配置文件

springboot默认的配置文件及导入额外配置文件 ★ Spring Boot默认加载的配置文件&#xff1a; (1) 类加载路径&#xff08;resources目录&#xff09;application.properties|yml &#xff08;相当于JAR包内&#xff09;optional: classpath:/ &#xff08;2&#xff09;类加…

中国农村程序员学习此【ES6】购买大平层,开上帕拉梅拉,迎娶白富美出任CEO走上人生巅峰

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录 比较 var 和 let 关键字的作用域--var可能被随时覆盖-全局变量for循环全局作用域函数作用域块作用域循环作用域HTML 中的全局变量提升改变一个用 const 声明的数组防止对象改变使用箭头函数编写简洁的匿名函…

aws的EC2云服务器

亚马逊官网有免费试用1年的服务器 1. 启动生成实例 1.1 创建实例时需要生成 使用的默认的 Debian 和 一个.pem后缀的秘钥 1.2 网上下一个Mobaxterm ,实例名是公有 IPv4 DNS 地址 ,使用SSH连接,登录名是admin 1.3 登录进去后 输入用户名 admin 后进去,sudo su 切换成 root…

python-爬虫作业

# -*- coding:utf-8 -*-Author: 董咚咚 contact: 2648633809qq.com Time: 2023/7/31 17:02 version: 1.0import requests import reimport xlwt from bs4 import BeautifulSoupurl "https://www.dygod.net/html/gndy/dyzz/" hd {user-Agent:Mozilla/4.0 (Windows N…

项目管理困扰?这里有个6W3H解决方案

引言 在项目管理的过程中&#xff0c;我们经常面临各种各样的挑战和问题。例如&#xff0c;如何确定项目的目标&#xff1f;如何分配资源&#xff1f;何时开始执行项目&#xff1f;在哪里进行项目&#xff1f;这些问题如果没有得到正确的解答&#xff0c;将会严重影响项目的进…

LAXCUS:私域部署的DataBricks

随着大数据技术的不断发展&#xff0c;越来越多的企业开始关注数据的价值和应用。Databricks作为一家开源的大数据平台&#xff0c;为企业提供了强大的数据分析和处理能力。然而&#xff0c;传统的Databricks部署方式存在一定的局限性&#xff0c;比如需要依赖于云服务提供商的…

go 语言实战入门案例之猜数字

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/backend-tutorial 】或者公众号【AIShareLab】回复 go 也可获取。 猜数字 第一个例子里面&#xff0c;我们会使用 Golang 来构建一个猜数字游戏。 在这个游戏里面&#xff0c;程序首先会生成一个介…

如何在群晖NAS中使用cpolar内网穿透

如何在群晖nas中使用cpolar内网穿透 文章目录 如何在群晖nas中使用cpolar内网穿透 今天&#xff0c;我们来为大家介绍&#xff0c;如何在群晖系统中&#xff0c;使用图形化界面的cpolar。 cpolar经过图形化改造后&#xff0c;使用方法已经简便了很多&#xff0c;基本与其他应用…

如何正确使用 ThreadLocal,你真的用对了吗? | 京东云技术团队

引言&#xff1a; 当多线程访问共享且可变的数据时&#xff0c;涉及到线程间同步的问题&#xff0c;并不是所有时候&#xff0c;都要用到共享数据&#xff0c;所以就需要ThreadLocal出场了。 ThreadLocal又称线程本地变量&#xff0c;使用其能够将数据封闭在各自的线程中&…

振弦传感器信号转换器应用山体滑坡安全监测

振弦传感器信号转换器应用山体滑坡安全监测 随着人类文明的进步&#xff0c;自然灾害对人们的生活和财产安全造成的威胁也越来越大。山体滑坡作为自然灾害中的一种&#xff0c;给人们的生活和财产安全带来了极大的威胁。因此&#xff0c;进行山体滑坡的安全监测显得尤为重要。振…