视图、索引、存储过程、触发器
视图、索引、存储过程、触发器
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补充: 规范来说,分组查询中,select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化,分组后如果某个字段的所有记录相同,同样可以select。 视图 视图是虚拟…...
ImportError: cannot import name ‘FlattenObservation‘ from ‘gym.wrappers‘ 解决方案
问题描述 今天在运行openai给出的ppo2的baseline的时候遇到了以下bug: File "/root/code/baselines_openai/baselines/common/cmd_util.py", line 12, in <module> from gym.wrappers import FlattenObservation, FilterObservation ImportErr…...
大件传输的9种方法
不知道你有没有试过用电子邮件进行大文件传输,由于文件大小的限制,往往会发送失败。同时,一些文件共享服务对传输的文件有大小限制,使得你无法与朋友分享电影片段或向客户展示你的工作样本。还有一些要求你注册一个账户࿰…...
将vue2的项目《后台管理模式》转变为vue3版本 (一)
本篇主要讲了将v2项目转变为v3版本,以本人经验愿于各位分享 希望大家可以一起交流!!!! 文章目录一、app 出口位置二 、 index.js 路由配置三、package.json 文件四、 main.js 既然安装插件那就需要引入五、 跨域问题总…...
苹果手机怎么下载手机铃声?图文教程,快速学会
很多小伙伴喜欢使用苹果手机,可是苹果手机里的铃声自己并不是很喜欢听,想要下载一些好听的歌曲更换自己的手机铃声。苹果手机怎么下载手机铃声?别着急,今天小编以图文的方式,教教大家如何使用苹果手机下载手机铃声。 苹…...
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写法(图一json写法和图二三form写法&#x…...
TOTOLINK NR1800X 系列 CVE 分析
漏洞简介 TOTOLINK NR1800X最近报了一些cve,现主要对其命令注入进行具体分析,以及对其登录绕过进行分析。 固件下载地址: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:定位到一行的行头 4.end:定位到一行的行末 有的小键盘可能没有home和end键,就需要自行修改IDEA中的快捷键或者使用键盘映射的方法修改。 将…...
【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢
HashMap中为什么引入红黑树,而不是AVL树呢1. 概述 开始学习这个知识点之前我们需要知道,在JDK1.8 以及之前,针对HashMap有什么不同。 JDK 1.7的时候,HashMap的底层实现是数组 链表JDK1.8的时候,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非极大值抑制(NMS) 2.2AutoShape 2.3 Detections 2.4 Classify 三、实验 …...
qemu的snapshot快照功能的详细使用介绍
快照功能还是蛮有趣的,就是资料比较少,这边万能菜道人特意整理了一下。参考内容:QEMU checkpoint(snapshot) 使用-pudn.comKVM&QEMU学习笔记(二)-蒲公英云 (dandelioncloud.cn)在线迁移存储 - 爱码网 (likecs.com)…...
谷歌关键词优化多少钱【2023年调研】
本文主要分享Google关键词排名优化的一些成本调研,方便大家参考。 本文由光算创作,有可能会被剽窃和修改,我们佛系对待这种行为吧。 今年2023年了,谷歌关键词优化到底要多少钱? 答案是:价格在2w~25w左右…...
凸包及其算法
概念 凸包:一个能够将所有给定点围住的最小周长封闭图形。 稳定凸包:在当前组成凸包的点集 V0V_0V0 中新增一个不在凸包上的点,形成新点集 V1V_1V1,若可以使 V1V_1V1 中所有点都在 V1V_1V1 的点的凸包上,则这…...
计算机网络学习笔记(二)物理层
物理层(传输比特0/1)基本概念 物理层下的传输媒体 1. 导引型 同轴电缆,双绞线(绞合可抵御干扰),光纤,电力线 2. 非导引型(调制振幅 频率 相位) 无线电波,微…...
为什么职称要提前准备?
职称反映专业技术人员的学术和技术水平、工作能力的工作成就,具有学衔、岗位两种性质。目前中国现状下,职称主要代表社会地位,就业经验,职称等级越高,越容易得到更高的社会经济和福利待遇。 职称通过申报、评审的形式…...
MyBatis详解1——相关配置
一、什么是MyBatis 1.定义:是一个优秀的持久层框架(ORM框架),它支持自定义 SQL、存储过程以及高级映射。MyBatis是一个用来更加简单的操作和读取数据库的工具。 2.支持的操作方式:xml或者注解实现操作(xm…...
字节青训营——秒杀系统设计学习笔记(三)
限流算法 限流顾名思义,就是对请求或并发数进行限制;通过对一个时间窗口内的请求量进行限制来保障系统的正常运行。如果我们的服务资源有限、处理能力有限,就需要对调用我们服务的上游请求进行限制,以防止自身服务由于资源耗尽而…...
每天一道大厂SQL题【Day10】电商分组TopK实战
每天一道大厂SQL题【Day10】电商分组TopK实战 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…...
最全的免费录屏工具,这 19 款录屏软件绝对值得你收藏
屏幕录制软件可让您捕获屏幕以与他人共享,创建与产品相关的视频、教程、课程、演示、视频等。这些软件是您能够从网络摄像头和屏幕录制视频。以下是精选的顶级屏幕录像机列表。 适用于 PC 的19 款免费录屏屏幕录像机软件 1)奇客免费录屏 奇客免费录屏&am…...
vb.net计算之.net core基础(2)-发布应用
目录 发布程序测试运行运行方式发布程序 首先,将编译配置改为Release 然后,发布应用,在生成菜单下。 选择发布到文件夹 继续选择文件夹 接着,完成 关闭 点击发布标签栏的发布按钮...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
