当前位置: 首页 > news >正文

视图、索引、存储过程、触发器

视图、索引、存储过程、触发器

group by补充:

规范来说,分组查询中,select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化,分组后如果某个字段的所有记录相同,同样可以select。

在这里插入图片描述

  

  

视图

视图是虚拟的表。与包含数据的表不一样,视图(虚拟表)是动态检索数据的查询

视图的作用是,如果表结构过于复杂,对于不了解表结构的使用者是不友好的,创建者可以根据使用者需求提炼(筛选)出一批数据成为一个虚拟的表供其使用。再有

在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据。

重要的是知道视图仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。

因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果你用多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会发现性能下降得很厉害。所以不要滥用视图。

可以通过视图修改原数据,但是不建议这么做。

注意:

  • 与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。

  • 对于可以创建的视图数目没有限制。

  • 为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。

  • 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。

  • ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。

  • 视图不能索引,也不能有关联的触发器或默认值。

  • 视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。

使用命令:

  • 视图用CREATE VIEW语句来创建。

  • 使用SHOW CREATE VIEW viewname;来查看创建视图的语句。

  • DROP删除视图,其语法为DROP VIEW viewname;

  • 更新视图时,可以先用DROP再用CREATE。也可以直接用CREATE OR REPLACE VIEW,此时如果要更新的视图不存在,则更新语句会创建一个视图;如果要更新的视图存在,则更新语句会替换原有视图。

使用样例:

#查询订单编号为20005的:产品名称,供应商名称,产品价格,购买数量
SELECT order_num,prod_name, vend_name, prod_price, quantity
FROM orderitems oJOIN products p ON o.prod_id = p.prod_idJOIN vendors v ON p.vend_id = v.vend_id
WHERE o.order_num = 20005;# 创建视图,包含所有订单的产品名称,供应商名称,产品价格,购买数量
CREATE VIEW order_detail ASSELECT order_num,prod_name, vend_name, prod_price, quantity
FROM orderitems oJOIN products p ON o.prod_id = p.prod_idJOIN vendors v ON p.vend_id = v.vend_id;# 查看视图的所有数据
SELECT * FROM order_detail;# 从视图中过滤数据
SELECT * FROM order_detail WHERE order_num=20005;# 删除视图
DROP VIEW order_detail; 

  

  

索引

索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,MySQL能快速到达。

索引是对数据库中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。

索引是一个单独的存储在磁盘上的数据库结构,包含着对数据表里所有记录的引用指针。使用索引可以快速找出在某个或多个列中的某个值。所有MySQL列类型都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。

索引是在存储引擎中实现的,因此每一种存储引擎的索引,都不一定完全相同。

  

索引的分类:

  • 普通索引和唯一索引

  普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。

  唯一索引要求索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合,必须唯一。

  主键索引是一种特殊的索引唯一,不允许有空值。在MySQL中,主键PRIMARY KEY会自动创建索引,唯一约束UNIQUE字段也会自动创建索引。

  • 单列索引和组合索引

单列索引及一个索引只包含单个列,一个表可以有多个单列索引。

组合索引是指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时遵循最左前缀原则。

  

使用命令:

  • 创建
--普通索引
CREATE TABLE book(id int AUTO_INCREMENT PRIMARY KEY ,bookname varchar(255) NOT NULL ,INDEX (bookname)   -- 注意
);
--唯一索引
CREATE TABLE book2(id int AUTO_INCREMENT PRIMARY KEY ,bookname varchar(255) NOT NULL ,UNIQUE INDEX (bookname)   -- 注意
); 
-- 给索引起名字
CREATE TABLE book3(id int AUTO_INCREMENT PRIMARY KEY ,bookname varchar(255) NOT NULL ,UNIQUE INDEX  name_idx (bookname)   -- 注意:如果不指定名称的话,名称则为字段名
); -- 注意:index 和key是等价的
  • 单独创建索引(非建表时)
--普通索引
CREATE INDEX index_name
ON table_name (column_name);
--唯一索引
CREATE UNIQUE INDEX index_name
ON table_name (column_name);
--组合索引
CREATE INDEX index_name
ON table_name (column_name1,column_name2);
  • 删除索引(两种方式)
ALTER TABLE table_name DROP INDEX index_name;DROP INDEX index_name ON table_name; 

  

  

存储过程

简单的说存储过程就是一条或者多条语句的集合,可视为批文件(脚本),但是其作用不仅限于批处理。

  • 基本形式
CREATE PROCEDURE  存储过程名 (参数列表)
BEGIN    SQL语句代码块
END
  • 举例一
# 创建存储过程
CREATE PROCEDURE my_test()
BEGINSELECT * FROM book;
END;# 调用存储过程
CALL my_test();# 删除存储过程
DROP PROCEDURE my_test;
  • 举例二
# 创建存储过程
CREATE PROCEDURE my_test()
BEGIN
#   declare 定义变量i DECLARE i int DEFAULT 0;WHILE i<10 doINSERT INTO book (bookname) VALUES (concat('悲惨的世界',i));SET i=i+1;end WHILE ;
END;

  

  

触发器

MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT,UPDATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

触发器是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用。

创建:

CREATE TRIGGER trigger_name trigger_time trigger_event
ON tab_name FOR EACH ROW trigger_stmt
  • trigger_name:触发器名称,用户自行指定;

  • trigger_time :触发时机,可以指定为before或after;

  • trigger_event:触发事件,包括INSERT,UPDATE和DELETE;

  • tab_name:要建立触发器的表名;

  • trigger_stmt:触发器执行语句。

CREATE TABLE book2(id int AUTO_INCREMENT PRIMARY KEY ,bookname varchar(255) NOT NULL
);
ALTER TABLE book  ADD INDEX name_idx(bookname);# 创建触发器,在book表中插入一条数据时自动在book2尾部备份一份新的book
CREATE TRIGGER book_insert_select AFTER INSERT 
ON book FOR EACH ROW INSERT INTO book2(bookname) SELECT bookname FROM book;INSERT INTO book(bookname)VALUES ('《平凡的世界2》');# 查看触发器
SHOW TRIGGERS ;# 也可以在triggers表中查看触发器
SELECT * FROM information_schema.triggers;# 删除触发器
DROP TRIGGER book_insert_select;

相关文章:

视图、索引、存储过程、触发器

视图、索引、存储过程、触发器 group by补充&#xff1a; 规范来说&#xff0c;分组查询中&#xff0c;select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化&#xff0c;分组后如果某个字段的所有记录相同&#xff0c;同样可以select。 视图 视图是虚拟…...

ImportError: cannot import name ‘FlattenObservation‘ from ‘gym.wrappers‘ 解决方案

问题描述 今天在运行openai给出的ppo2的baseline的时候遇到了以下bug&#xff1a; File "/root/code/baselines_openai/baselines/common/cmd_util.py", line 12, in <module> from gym.wrappers import FlattenObservation, FilterObservation ImportErr…...

大件传输的9种方法

不知道你有没有试过用电子邮件进行大文件传输&#xff0c;由于文件大小的限制&#xff0c;往往会发送失败。同时&#xff0c;一些文件共享服务对传输的文件有大小限制&#xff0c;使得你无法与朋友分享电影片段或向客户展示你的工作样本。还有一些要求你注册一个账户&#xff0…...

将vue2的项目《后台管理模式》转变为vue3版本 (一)

本篇主要讲了将v2项目转变为v3版本&#xff0c;以本人经验愿于各位分享 希望大家可以一起交流&#xff01;&#xff01;&#xff01;&#xff01; 文章目录一、app 出口位置二 、 index.js 路由配置三、package.json 文件四、 main.js 既然安装插件那就需要引入五、 跨域问题总…...

苹果手机怎么下载手机铃声?图文教程,快速学会

很多小伙伴喜欢使用苹果手机&#xff0c;可是苹果手机里的铃声自己并不是很喜欢听&#xff0c;想要下载一些好听的歌曲更换自己的手机铃声。苹果手机怎么下载手机铃声&#xff1f;别着急&#xff0c;今天小编以图文的方式&#xff0c;教教大家如何使用苹果手机下载手机铃声。 苹…...

AJAX笔记(二)Fetch和axios

1、Fetch 1.1、XMLHttpRequest的缺陷 1.2、fetch的get写法 1.3、fetch的post写法 1.4、fetch的put写法 1.5、fetch的patch写法 1.6、fetch的delete写法 2、axios 2.1、axios的介绍 2.2、axios的get写法 2.3、axios的post写法&#xff08;图一json写法和图二三form写法&#x…...

TOTOLINK NR1800X 系列 CVE 分析

漏洞简介 TOTOLINK NR1800X最近报了一些cve&#xff0c;现主要对其命令注入进行具体分析&#xff0c;以及对其登录绕过进行分析。 固件下载地址&#xff1a;https://www.totolink.net/home/menu/detail/menu_listtpl/download/id/225/ids/36.html 环境搭建 固件提取 binwa…...

IDEA如何将代码进行上下左右移动,改变位置

鼠标光标定位快捷键 1.ctrl Home:定位到一页代码的行头 2.ctrl end :定位到一页代码的行末 3.home&#xff1a;定位到一行的行头 4.end&#xff1a;定位到一行的行末 有的小键盘可能没有home和end键&#xff0c;就需要自行修改IDEA中的快捷键或者使用键盘映射的方法修改。 将…...

【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢

HashMap中为什么引入红黑树&#xff0c;而不是AVL树呢1. 概述 开始学习这个知识点之前我们需要知道&#xff0c;在JDK1.8 以及之前&#xff0c;针对HashMap有什么不同。 JDK 1.7的时候&#xff0c;HashMap的底层实现是数组 链表JDK1.8的时候&#xff0c;HashMap的底层实现是数…...

深度学习Week15-common.py文件解读(YOLOv5)

目录 简介 一.基本组件 1.1autopad 1.2Conv 1.3 Focus 1.4Bottleneck 1.5BottleneckCSP 1.6 C3 1.7 SPP 1.8Concat 1.9Contract、Expand 二、重要类 2.1非极大值抑制&#xff08;NMS&#xff09; 2.2AutoShape 2.3 Detections 2.4 Classify 三、实验 &#x1f…...

qemu的snapshot快照功能的详细使用介绍

快照功能还是蛮有趣的&#xff0c;就是资料比较少&#xff0c;这边万能菜道人特意整理了一下。参考内容&#xff1a;QEMU checkpoint(snapshot) 使用-pudn.comKVM&QEMU学习笔记&#xff08;二&#xff09;-蒲公英云 (dandelioncloud.cn)在线迁移存储 - 爱码网 (likecs.com)…...

谷歌关键词优化多少钱【2023年调研】

本文主要分享Google关键词排名优化的一些成本调研&#xff0c;方便大家参考。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 今年2023年了&#xff0c;谷歌关键词优化到底要多少钱&#xff1f; 答案是&#xff1a;价格在2w~25w左右…...

凸包及其算法

概念 凸包&#xff1a;一个能够将所有给定点围住的最小周长封闭图形。 稳定凸包&#xff1a;在当前组成凸包的点集 V0V_0V0​ 中新增一个不在凸包上的点&#xff0c;形成新点集 V1V_1V1​&#xff0c;若可以使 V1V_1V1​ 中所有点都在 V1V_1V1​ 的点的凸包上&#xff0c;则这…...

计算机网络学习笔记(二)物理层

物理层&#xff08;传输比特0/1&#xff09;基本概念 物理层下的传输媒体 1. 导引型 同轴电缆&#xff0c;双绞线&#xff08;绞合可抵御干扰&#xff09;&#xff0c;光纤&#xff0c;电力线 2. 非导引型&#xff08;调制振幅 频率 相位&#xff09; 无线电波&#xff0c;微…...

为什么职称要提前准备?

职称反映专业技术人员的学术和技术水平、工作能力的工作成就&#xff0c;具有学衔、岗位两种性质。目前中国现状下&#xff0c;职称主要代表社会地位&#xff0c;就业经验&#xff0c;职称等级越高&#xff0c;越容易得到更高的社会经济和福利待遇。 职称通过申报、评审的形式…...

MyBatis详解1——相关配置

一、什么是MyBatis 1.定义&#xff1a;是一个优秀的持久层框架&#xff08;ORM框架&#xff09;&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis是一个用来更加简单的操作和读取数据库的工具。 2.支持的操作方式&#xff1a;xml或者注解实现操作&#xff08;xm…...

字节青训营——秒杀系统设计学习笔记(三)

限流算法 限流顾名思义&#xff0c;就是对请求或并发数进行限制&#xff1b;通过对一个时间窗口内的请求量进行限制来保障系统的正常运行。如果我们的服务资源有限、处理能力有限&#xff0c;就需要对调用我们服务的上游请求进行限制&#xff0c;以防止自身服务由于资源耗尽而…...

每天一道大厂SQL题【Day10】电商分组TopK实战

每天一道大厂SQL题【Day10】电商分组TopK实战 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&…...

最全的免费录屏工具,这 19 款录屏软件绝对值得你收藏

屏幕录制软件可让您捕获屏幕以与他人共享&#xff0c;创建与产品相关的视频、教程、课程、演示、视频等。这些软件是您能够从网络摄像头和屏幕录制视频。以下是精选的顶级屏幕录像机列表。 适用于 PC 的19 款免费录屏屏幕录像机软件 1&#xff09;奇客免费录屏 奇客免费录屏&am…...

vb.net计算之.net core基础(2)-发布应用

目录 发布程序测试运行运行方式发布程序 首先,将编译配置改为Release 然后,发布应用,在生成菜单下。 选择发布到文件夹 继续选择文件夹 接着,完成 关闭 点击发布标签栏的发布按钮...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

大数据驱动企业决策智能化的路径与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;数据驱动的企业竞争力重构 在这个瞬息万变的商业时代&#xff0c;“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…...