MySQL高级数据操作
✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。
🍎个人主页:Hhzzy99
🍊个人信条:坚持就是胜利!
💞当前专栏:MySQL
🥭本文内容:深入理解MySQL高级数据操作。
MySQL高级数据操作
文章目录
- MySQL高级数据操作
- 前言
- 视图的创建与使用
- 存储过程与函数
- 触发器的设计与应用
- 事件调度器的使用
- 用户定义变量与临时表
- 总结
前言
MySQL是一个广泛使用的关系数据库管理系统。在这篇博客中,我们将探讨MySQL的高级数据操作功能。我们将讨论视图的创建和使用,存储过程和函数,触发器的设计和应用,事件调度器的使用,以及用户定义变量和临时表。每个主题都将包括代码示例,以帮助读者更好地理解和应用这些高级功能。
视图的创建与使用
视图是一个虚拟表,它的内容由查询定义。不同于普通的表,视图不包含数据,而是在查询的基础上生成数据。
创建视图的语法如下:
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
例如,假设我们有一个名为Employees
的表,它包含员工的ID、姓名、职位和工资。我们可以创建一个视图,只显示工资高于50000的员工。
CREATE VIEW HighSalaryEmployees AS
SELECT EmployeeID, Name, Position
FROM Employees
WHERE Salary > 50000;
要查询视图,你可以像查询普通表一样使用SELECT
语句:
SELECT * FROM HighSalaryEmployees;
存储过程与函数
存储过程是为了完成特定功能的SQL语句集,存储在数据库中,可以被多个程序或用户共享。函数是一种特殊类型的存储过程,它返回一个值。这意味着你可以在任何表达式中使用函数。
创建存储过程的语法如下:
CREATE PROCEDURE procedure_name()
BEGIN-- SQL statements
END;
例如,我们可以创建一个存储过程,用来增加员工的工资:
CREATE PROCEDURE IncreaseSalary(p_EmployeeID INT, p_Amount INT)
BEGINUPDATE EmployeesSET Salary = Salary + p_AmountWHERE EmployeeID = p_EmployeeID;
END;
要调用这个存储过程,你可以使用CALL
语句:
CALL IncreaseSalary(123, 5000);
创建函数的语法如下:
CREATE FUNCTION function_name(parameters)
RETURNS data_type
BEGIN-- SQL statements
RETURN value;
END;
例如,我们可以创建一个函数,返回特定员工的工资:
CREATE FUNCTION GetSalary(p_EmployeeID INT)
RETURNS INT
BEGINDECLARE v_Salary INT;SELECT Salary INTO v_Salary FROM Employees WHERE EmployeeID = p_EmployeeID;RETURN v_Salary;
END;
要调用这个函数,你可以在任何表达式中使用它:
SELECT GetSalary(123);
触发器的设计与应用
触发器是一种特殊类型的存储过程。它在数据库表上定义,当特定的数据库事件(如插入,更新或删除)发生时,触发器将自动执行。
创建触
发器的语法如下:
CREATE TRIGGER trigger_name
trigger_time trigger_event
ON table_name FOR EACH ROW
BEGIN-- SQL statements
END;
其中,trigger_time
可以是BEFORE
或AFTER
,trigger_event
可以是INSERT
,UPDATE
或DELETE
。
例如,我们可以创建一个触发器,在每次增加员工工资时,都在SalaryHistory
表中记录一条记录:
CREATE TRIGGER LogSalaryIncrease
AFTER UPDATE ON Employees
FOR EACH ROW
BEGINIF NEW.Salary > OLD.Salary THENINSERT INTO SalaryHistory(EmployeeID, OldSalary, NewSalary, ChangeDate)VALUES(NEW.EmployeeID, OLD.Salary, NEW.Salary, NOW());END IF;
END;
当你在Employees
表中更新工资时,这个触发器就会自动执行。
事件调度器的使用
事件调度器是MySQL的一项功能,允许你在指定的时间或时间间隔自动执行SQL语句或存储过程。
首先,你需要确保事件调度器已经启用。你可以通过以下命令检查:
SHOW VARIABLES LIKE 'event_scheduler';
如果事件调度器未启用,你可以通过以下命令启用它:
SET GLOBAL event_scheduler = ON;
创建事件的语法如下:
CREATE EVENT event_name
ON SCHEDULE schedule
DO-- SQL statements
其中,schedule
可以是AT timestamp
或EVERY interval
。
例如,我们可以创建一个事件,每天晚上12点自动删除所有未活跃的员工:
CREATE EVENT PurgeInactiveEmployees
ON SCHEDULE EVERY 1 DAY STARTS '2023-05-29 00:00:00'
DODELETE FROM Employees WHERE LastActiveDate < DATE_SUB(NOW(), INTERVAL 1 YEAR);
这个事件会每天自动执行,无需人工干预。
用户定义变量与临时表
MySQL支持用户定义变量,这些变量存储在用户会话中,并在会话结束时销毁。用户定义变量可以存储一个值,这个值可以在SQL语句中使用。
设置用户定义变量的语法如下:
SET @variable_name = value;
例如,我们可以设置一个变量,然后在查询中使用它:
SET @EmployeeID = 123;
SELECT * FROM Employees WHERE EmployeeID = @EmployeeID;
临时表是一种特殊类型的表,只在当前会话中存在,当会话结束时,临时表将被自动删除。
创建临时表的语法如下:
CREATE TEMPORARY TABLE temp_table_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
例如,我们可以创建一个临时表,存储所有高薪员工的信息:
CREATE TEMPORARY TABLE TempHighSalaryEmployees AS
SELECT * FROM Employees WHERE Salary > 50000;
要查询临时表,你可以像查询普通表一样使用SELECT
语句:
```sql
SELECT * FROM TempHighSalaryEmployees;
总结
在这篇博客中,我们探讨了MySQL的高级数据操作功能,包括视图的创建和使用,存储过程和函数,触发器的设计和应用,事件调度器的使用,以及用户定义变量和临时表。每一个主题都包含了代码示例,帮助你更好地理解和应用这些功能。
虽然这些功能在初学者看来可能有些复杂,但是一旦你掌握了它们,你会发现它们是非常强大的工具,可以帮助你更有效地管理和操作数据。
我希望这篇博客对你有所帮助,如果你有任何问题或反馈,欢迎在评论区留言。在你的MySQL旅程中,祝你一切顺利!
相关文章:
MySQL高级数据操作
✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:MySQL 🥭本文内容&a…...

硬件设计电源系列文章-DCDC转换器基础知识
文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 本文主要接着上篇,上篇文章主要讲述了LDO的相关基础知识,本节开始分享DCDC基础知识 整体架构流程 提示:这里可以添加技术整体架构 以下是…...

XdsObjects .NET 8.45.1001.0 Crack
XdsObjects 是一个工具包,允许开发人员使用 IHE XDS 和 XDS-I 配置文件开发应用程序,只需花费最少的时间和精力,因为遵守配置文件和 ebXML 规则的所有艰苦工作都由该工具包处理。 它为所有角色提供客户端和服务器支持,包括&#…...

数据安全--17--数据安全管理之数据传输
本博客地址:https://security.blog.csdn.net/article/details/131061729 一、数据传输概述 数据传输有两个主体,一个是数据发送方,另一个是数据接收方。数据在通过不可信或者较低安全性的网络进行传输时,容易发生数据被窃取、伪…...

SpringSecurity实现前后端分离登录token认证详解
目录 1. SpringSecurity概述 1.1 权限框架 1.1.1 Apache Shiro 1.1.2 SpringSecurity 1.1.3 权限框架的选择 1.2 授权和认证 1.3 SpringSecurity的功能 2.SpringSecurity 实战 2.1 引入SpringSecurity 2.2 认证 2.2.1 登录校验流程 2.2.2 SpringSecurity完整流程 2.2.…...

Vue3_ElementPlus_简单增删改查(2023)
Vue3,Element Plus简单增删改查 代码:https://github.com/xiaoming12318/Vue3_ElementPlus_CRUD.git 环境: Visual Studio Code Node.js 16.0或更高版本,https://nodejs.org/en axios 快速上手: 如果已经有16.0及…...

vue中重写并自定义console.log
0. 背景 在vue2项目中自定义console.log并输出文件名及行、列号 1. 实现 1.1 自定义console.log export default {// 输出等级: 0-no, 1-error, 2-warning, 3-info, 4-debug, 5-loglevel: 5,// 输出模式: 0-default, 1-normal, 2-randommode: 1,// 是否输出图标hasIcon: fal…...

基于OpenCV 和 Dlib 进行头部姿态估计
写在前面 工作中遇到,简单整理博文内容涉及基于 OpenCV 和 Dlib头部姿态评估的简单Demo理解不足小伙伴帮忙指正 庐山烟雨浙江潮,未到千般恨不消。到得还来别无事,庐山烟雨浙江潮。 ----《庐山烟雨浙江潮》苏轼 https://github.com/LIRUILONGS…...

24个Jvm面试题总结及答案
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每…...
freemarker 生成前端文件
Freemarker是一种模板引擎,它允许我们在Java应用程序中分离视图和业务逻辑。在Freemarker中,List是一种非常有用的数据结构,它允许我们存储一组有序的元素。有时候,我们需要判断一个List是否为空,这在程序设计中有许多…...

Pycharm+pytest+allure打造高逼格的测试报告
目录 前言: 1、安装allure 2、安装allure-pytest 3、一个简单的用例test_simpe.py 4、在pycharm底部打开terminal 5、用allure美化报告 6、查看报告 总结: 前言: 今天分享的内容:在Pycharmpytest基础上使用allure打造高逼格…...

Mybatis-Plus中update更新操作用法
目录 一、前言二、update1、关于修改的4个条件构造器2、UpdateWrapper【用法示例】3、LambdaUpdateWrapper【用法示例】4、UpdateChainWrapper【 用法示例】5、LambdaUpdateChainWrapper【 用法示例】6、updateById 和 updateBatchById7、Mybatis-plus设置某个字段值为null的方…...
16道JVM面试题
1.jvm内存布局 1.程序计数器:当前线程正在执行的字节码的行号指示器,线程私有,唯一一个没有规定任何内存溢出错误的情况的区域。 2.Java虚拟机栈:线程私有,描述Java方法执行的内存模型,每个方法运行时都会…...

HttpRunner 接口自动化测试框架实战,打造高效测试流程
简介 2018年python开发者大会上,了解到HttpRuuner开源自动化测试框架,采用YAML/JSON格式管理用例,能录制和转换生成用例功能,充分做到用例与测试代码分离,相比excel维护测试场景数据更加简洁。在此,利用业…...

手写一个webpack插件(plugin)
熟悉 vue 和 react 的小伙伴们都知道,在执行过程中会有各种生命周期钩子,其实webpack也不例外,在使用webpack的时候,我们有时候需要在 webpack 构建流程中引入自定义的行为,这个时候就可以在 hooks 钩子中添加自己的方…...
jvm常见面试题
0x01. 内存模型以及分区,需要详细到每个区放什么。 栈区: 栈分为java虚拟机栈和本地方法栈 重点是Java虚拟机栈,它是线程私有的,生命周期与线程相同。 每个方法执行都会创建一个栈帧,用于存放局部变量表࿰…...
TF-A 项目的长期支持介绍
引流关键词:Armv8-A, Armv9-A, Cortex-A, Cortex-A12, Cortex-A15, Cortex-A17, Cortex-A32, Cortex-A34, Cortex-A35, Cortex-A5, Cortex-A510, Cortex-A53, Cortex-A55, Cortex-A57, Cortex-A65, Cortex-A65AE, Cortex-A7, Cortex-A710, Cortex-A715, Cortex-A72, Cortex-A7…...

企业电子招标采购系统源码java 版本 Spring Cloud + Spring Boot
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…...
7.Mysql 事务底层
一、事务的基础知识 mysql中的事务 分为 显式事务 和 隐式事务。 1.1 显式事务 显式事务就是我们手动开启事务,并且提交事务比如: -- 开启事务 begin; -- 执行查询语句 select *from where id = 1 for update ; -- 提交事务 commit;1.2 隐式事务 在 MySQL 中,隐式事务是…...

15.DIY可视化-拖拽设计1天搞定主流小程序-分类联动文章列表实时刷新
分类联动文章列表实时刷新 本教程均在第一节中项目启动下操作 分类联动文章列表实时刷新前言需求一:功能实现:点击首页分类,对应分类内容显示到当前页一、清空原分类界面:二. 设置选项卡三:设定展示内容字段:1.跨页面复制:文章分类组件到分类 C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...