【跟着例子学MySQL】SQL进阶 – 视图、事务和变量

文章目录

  • 前言
  • 回顾
  • 视图
  • 事务
  • 用户变量
  • 未完待续


前言

在这里插入图片描述
举例子,是最简单有效的学习方法。本系列文章以一个贯穿始终的场景,结合多个实例讲解MySQL的基本用法。

为什么要写这个系列?

  • 模仿是最好的老师,实践是检验成果的方法。
  • 本系列以实操样例和应用场景为核心,将MySQL基本用法贯穿其中,达到学以致用的效果。

为什么要学习MySQL?

  • MySQL是最常用的数据库之一,具有简单易用的特点,适合初学者学习
  • 数据库的基本用法有相通之处,学会MySQL可以为学习其他数据库打下良好基础

跟别的入门教材有什么不同?

  • 以一个贯穿始终的应用场景为主线,渐进地讲解用法
  • 难度适中,既有基础方法,也有值得注意的关键细节

本系列文章不包含哪些内容?

该系列文章的目标是,将最核心的知识,以最直接的方式,呈现给初学者。因此不包含:

  • MySQL安装方法
  • MySQL系统管理方法,例如备份、恢复、导入导出等
  • 高级主题,例如数据库监控、数据库调优和SQL优化

回顾

上篇文章👉《【跟着例子学MySQL】SQL进阶 – 子查询和时间 讲了有关子查询、日期和时间的内容。这篇介绍视图、事务和变量的用法。


视图

视图是一个不包含任何物理数据的虚拟表。它提供了另一种查看数据的方法。

例如:

-- 从products、suppliers和products_suppliers表中定义一个被称为supplier_view的视图
mysql> CREATE VIEW supplier_view
AS
SELECT suppliers.name as `Supplier Name`, products.name as `Product Name`
FROM products
JOIN suppliers ON products.productID = products_suppliers.productID
JOIN products_suppliers ON suppliers.supplierID = products_suppliers.supplierID;
-- 你可以将定义的视图视为一个普通表
mysql> SELECT * FROM supplier_view;
+---------------+--------------+
| Supplier Name | Product Name |
+---------------+--------------+
| ABC Traders   | Pencil 3B    |
| ABC Traders   | Pencil 4B    |
| ABC Traders   | Pencil 5B    |
| XYZ Company   | Pencil 6B    |
+---------------+--------------+
mysql> SELECT * FROM supplier_view WHERE `Supplier Name` LIKE 'ABC%';
+---------------+--------------+
| Supplier Name | Product Name |
+---------------+--------------+
| ABC Traders   | Pencil 3B    |
| ABC Traders   | Pencil 4B    |
| ABC Traders   | Pencil 5B    |
+---------------+--------------+

mysql> DROP VIEW IF EXISTS patient_view;
mysql> CREATE VIEW patient_view
AS
SELECT
patientID AS ID,
name AS Name,
dateOfBirth AS DOB,
TIMESTAMPDIFF(YEAR, dateOfBirth, NOW()) AS Age
FROM patients
ORDER BY Age, DOB;
mysql> SELECT * FROM patient_view WHERE Name LIKE 'A%';
+------+---------+------------+------+
| ID | Name | DOB | Age |
+------+---------+------------+------+
| 1003 | Ali     | 2011-01-30 | 1    |
| 1001 | Ah Teck | 1991-12-31 | 20   |
+------+---------+------------+------+
mysql> SELECT * FROM patient_view WHERE age >= 18;
+------+---------+------------+------+
| ID   | Name    | DOB        | Age  |
+------+---------+------------+------+
| 1001 | Ah Teck | 1991-12-31 | 20   |
+------+---------+------------+------+

事务

原子事务是一组SQL语句,它们要么全部成功,要么全部失败。事务对于确保数据库没有部分更新非常重要。事务处理将通过提交和回滚来执行。

例如:

mysql> CREATE TABLE accounts (
           name VARCHAR(30),
           balance DECIMAL(10,2)
       );
mysql> INSERT INTO accounts VALUES ('Paul', 1000), ('Peter', 2000);
mysql> SELECT * FROM accounts;
+-------+---------+
| name  | balance |
+-------+---------+
| Paul  | 1000.00 |
| Peter | 2000.00 |
+-------+---------+
-- 将钱从一个帐户转帐到另一个帐户
mysql> START TRANSACTION;
mysql> UPDATE accounts SET balance = balance - 100 WHERE name = 'Paul';
mysql> UPDATE accounts SET balance = balance + 100 WHERE name = 'Peter';
mysql> COMMIT; -- 提交事务处理并结束事务处理
mysql> SELECT * FROM accounts;
+-------+---------+
| name  | balance |
+-------+---------+
| Paul  | 900.00  |
| Peter | 2100.00 |
+-------+---------+
mysql> START TRANSACTION;
mysql> UPDATE accounts SET balance = balance - 100 WHERE name = 'Paul';
mysql> UPDATE accounts SET balance = balance + 100 WHERE name = 'Peter';
mysql> ROLLBACK; -- 放弃此交易的所有更改并结束交易
mysql> SELECT * FROM accounts;
+-------+---------+
| name | balance  |
+-------+---------+
| Paul  | 900.00  |
| Peter | 2100.00 |
+-------+---------+

如果你在另一个mysql客户端并在事务期间(在提交或回滚之前)进行查询,将不会看到更改。或者,你还可以禁用所谓的自动提交模式,该模式默认启动,并自动提交每个SQL语句。

-- 通过将其设置为false (0)来禁用自动提交
mysql> SET autocommit = 0;
mysql> UPDATE accounts SET balance = balance - 100 WHERE name = 'Paul';
mysql> UPDATE accounts SET balance = balance + 100 WHERE name = 'Peter';
mysql> COMMIT;
mysql> SELECT * FROM accounts;
+-------+---------+
| name  | balance |
+-------+---------+
| Paul  | 800.00  |
| Peter | 2200.00 |
+-------+---------+
mysql> UPDATE accounts SET balance = balance - 100 WHERE name = 'Paul';
mysql> UPDATE accounts SET balance = balance + 100 WHERE name = 'Peter';
mysql> ROLLBACK;
mysql> SELECT * FROM accounts;
+-------+---------+
| name  | balance |
+-------+---------+
| Paul  | 800.00  |
| Peter | 2200.00 |
+-------+---------+
mysql> SET autocommit = 1; -- 启用自动提交

事务是一组满足ACID要求的操作单元:

  1. 原子性:如果所有操作都成功,则将提交更新到数据库。如果任何操作失败,则将回滚整个事务,并且不会对数据库进行任何更改。换句话说,没有部分更新。
  2. 一致性:事务将数据库从一个一致状态转换为另一个一致状态。
  3. 隔离:对事务的更改在提交之前对其他事务无效。
  4. 持久性:所承诺的改变是持久的,永远不会丢失

用户变量

在MySQL中,您可以通过:

  1. SELECT语句中通过@varname :=value定义,或者
  2. 通过SET @varname := valueSET @varname = value命令

例如:

mysql> SELECT @ali_dob := dateOfBirth FROM patients WHERE name = 'Ali';
mysql> SELECT name WHERE dateOfBirth < @ali_dob;
mysql> SET @today := CURDATE();
mysql> SELECT name FROM patients WHERE nextVisitDate = @today;

未完待续

下一篇我们接着介绍JOIN的更多用法。


如果喜欢这篇文章,请不要忘记关注🧡、点赞👍和收藏📔哦!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于VMware安装Linux虚拟机

1.准备Linux环境 首先&#xff0c;我们要准备一个Linux的系统&#xff0c;成本最低的方式就是在本地安装一台虚拟机。为了统一学习环境&#xff0c;不管是使用MacOS还是Windows系统的同学&#xff0c;都建议安装一台虚拟机。 windows采用VMware&#xff0c;Mac则采用Fusion …

视频集中存储LntonCVS视频监控汇聚平台智慧园区应用方案

智慧园区&#xff0c;作为现代化城市发展的重要组成部分&#xff0c;承载着产业升级的使命&#xff0c;是智慧城市建设的重要体现。在当前产业园区竞争日益激烈的情况下&#xff0c;越来越多的用户关注如何将项目打造成完善的智慧园区。 在智慧园区的建设过程中&#xff0c;各类…

PDF打印技巧:如何跳过不需要的页面?如何关闭打印权限?

作为打工人&#xff0c;经常需要打印各种文档&#xff0c;比如PDF文件。今天分享一下PDF文件的两个打印技巧&#xff0c;如果你还不知道&#xff0c;就一起来看看吧&#xff01; 技巧1&#xff1a;打印PDF如何跳过不需要的页面 有时候&#xff0c;一个PDF文件有很多页&#xf…

Golang | Leetcode Golang题解之第112题路径总和

题目&#xff1a; 题解&#xff1a; func hasPathSum(root *TreeNode, sum int) bool {if root nil {return false}if root.Left nil && root.Right nil {return sum root.Val}return hasPathSum(root.Left, sum - root.Val) || hasPathSum(root.Right, sum - roo…

AI率怎么降低?有哪些论文降重降AI率的工具和方法?

关于aigc降重怎么降重&#xff1f;论文降重有哪些方法&#xff1f;有没有好用的降重软件&#xff1f;网上很多大神都有回答&#xff0c;但是最近还是会有很多学弟学妹会问这些问题&#xff01; 有没有发现论文降重像玄学一样复杂&#xff1f;最近刚完成一篇论文&#xff0c;使…

【渗透测试】|基于dvwa的CSRF初级,中级,高级

一、渗透测试 二、渗透测试过程中遇到的问题和解决 在初级csrf中&#xff0c;想要通过伪造一个404页面&#xff0c;达到修改密码的效果 伪造404页面的html代码如下&#xff1a; <html> <head> </head> <body> <img src"http://192.xx.xx.xx/…

Docker是什么?使用场景作用及Docker的安装和启动详解

目录 Docker是什么&#xff1f; Docker的发展 Docker的安装 Docker使用 Docker的运行机制 第一个Docker容器 进入Docker容器 客户机访问容器 Docker是什么&#xff1f; Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker …

Biological Psychiatry:内源性功能连接的特定模式与强迫症的伤害回避有关

摘要 强迫症(OCD)患者通常在没有实际威胁的情况下表现出持续的回避行为。强迫症对生活质量的影响和患者之间的异质性使得寻找新的大脑-行为干预目标十分有必要。基于啮齿类动物和非人灵长类动物持续回避行为的机制和解剖学研究&#xff0c;本研究的目标是测试持续回避行为相关…

本科java菜鸡,分享腾讯菜鸟京东面试经历

楼主本科菜鸡一个&#xff0c;菜鸟三面挂掉&#xff0c;腾讯二面就挂了&#xff0c;美团携程58集团的笔试做过之后全部都石沉大海&#xff0c;现在实在缺乏实力追求选择空间&#xff0c;望大佬不要嘲笑。这里给大家分享一波面经造福后仁吧。 菜鸟网络 菜鸟是我2月27号就找学长…

什么是抗压能力?如何判断自己的抗压能力?

什么是抗压能力&#xff1f; 抗压能力&#xff0c;也叫心理承受能力&#xff0c;指的是面对外界的压力&#xff0c;逆境&#xff0c;困境和挑战&#xff0c;能够有效的调整自己的心态&#xff0c;有效的应对和解决问题的能力。 抗压能力涉及多个方面&#xff0c;比如&#xf…

cesium 地形加载

1.效果图&#xff1a; 2.cesium 的基础配置 //无token会导致球体无法显示 Cesium.Ion.defaultAccessToken "your token"; // 官网网配置的tokenvar viewer new Cesium.Viewer(cesiumContainer, {geocoder: false,//控制地图是否显示一个地理编码&#xff08;geocodi…

apexcharts数据可视化之雷达图

apexcharts数据可视化之雷达图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基础雷达图多组数据雷达图雷达图标记点 基础雷达图 import ApexChart from react-apexcharts;export function BasicRadar() {// 数据序列const series [{name…

香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(一)

整期笔记索引 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试&#xff08;一&#xff09; 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试&#xff08;二&#xff09; Orange Pi AIPro开发板&#xff1a;昇腾AI处理器的强劲性能与广泛应用前景 在…

Java-文件操作

一、创建文件 1.创建文件夹 创建文件夹时&#xff0c;注意两个条件&#xff0c;该路径对应的是否为目录&#xff08;dir&#xff09;&#xff0c;该文件夹是否存在。 File Apathnew File("./文件夹A"); //当前路径文件夹的存储路径if(!Apath.exists() &&am…

Midjourney如何控制光照?提示词灵感来了!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Midjourney如何控制光照&#xff1f;提示词灵感来了&#xff01;文章目录 前言总结 前言 Midjourney v6 已经更新好久了&#xff0c;你知道有哪些可以控制光照效果的关键词吗…

为什么宋以前权臣篡位多、宋以后权臣篡位少?

时代不同&#xff0c;主要问题也不同。天下的大气候&#xff0c;自然就要左右王朝的小气候。权臣篡位&#xff0c;得先有权臣。但是&#xff0c;如果当权臣都没有了&#xff0c;又怎么可能有权臣篡位呢&#xff1f;这是一个社会基础的变化。宋以后的主要矛盾是中原和草原的争锋…

Dify快速接入微信

一、Dify简介 项目官网&#xff1a;Dify.AI 生成式 AI 应用创新引擎 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非…

【网络】网络编程套接字

一、知识提及 1.源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址 2.端口号 端口号(port)是传输层协议的内容. 端口号是一个2字节16位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;IP地址 …

企业文件加密实现数据泄露防护

在数字化时代&#xff0c;数据成为企业最宝贵的资产之一。然而&#xff0c;数据泄露事件频发&#xff0c;给企业带来了巨大的经济损失和声誉风险。为了保护企业的核心利益&#xff0c;实现数据泄露防护&#xff0c;企业必须采取有效的文件加密措施。 一、数据泄露的严重性 数据…

大疆、猛犸、西圣无线麦克风哪个牌子好?大疆、西圣麦克风测评PK

在当今这个全民参与媒体创作的时代&#xff0c;视频分享已经崛起为引领流行文化的关键力量。随着自媒体领域的竞争日益白热化&#xff0c;要想在浩瀚的内容海洋中脱颖而出&#xff0c;创作出卓越的作品无疑是吸引观众目光的核心要素。然而想要成功打造这样的佳作&#xff0c;除…