MySQL(B站CodeWithMosh)——2024.10.12(15)

news2024/11/22 16:17:58

ZZZZZZ目的
ZZZZZZ代码
ZZZZZZ重点
ZZZZZZ操作(非代码,需要自己手动)

4- WITH OPTION CHECK子句 | THE WITH OPTION CHECK Clause_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=66&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 将invoices_with_balance中id为2的发票更新成总支付等于总发票
    UPDATE invoices_with_balance
    SET payment_total = invoice_total
    WHERE invoice_id = 2

    可以发现,id为2的发票从invoices_with_balance这个表中消失了,因为这个表只将存在结余的发票展现出来,现在id为2的发票不存在结余了,所以也就不存在了
    假如我们现在不想让这一行消失,或者不希望UPDATE或者DELETE语句将行从视图中删除,那么需要在下面这一行代码的最后面加入WITH CHECK OPTION,这条子句会防止UPDATE或者DELETE语句将行从视图中删除
    CREATE OR REPLACE VIEW invoices_with_balance AS
    SELECT invoice_id, number, client_id, invoice_total, payment_total, 
           invoice_total - payment_total AS balance,
           invoice_date, due_date, payment_date
    FROM invoices
    WHERE (invoice_total - payment_total) > 0

    将invoices_with_balance中id为3的发票更新成总支付等于总发票
    UPDATE invoices_with_balance
    SET payment_total = invoice_total
    WHERE invoice_id = 3

    在我们运行时,会发现抱错,MySQL输出窗口显示检查视图失败

5- 视图的其他优点 | Other Benefits of Views_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=67&vd_source=eaeec77dfceb13d96cce76cc299fdd08视图的优点总结

  1. 视图可以简化查询
  2. 对我们的表可以防止一层抽象层,减少原表改动造成的影响
    个人觉得可以这样理解,假如说有一张表,然后根据这个表制作了一个视图,那么我们就可以后续都在这个视图上进行查询筛选。如果后续这个表有变动,我们不用对所有的查询筛选的代码进行修改,只用修改视图,保证视图和原来一样,就可以保证后续的查询筛选的代码不用修改。如果所有的查询筛选都是根据表来制作的,那么当表发生改变时,所有的查询筛选都要修改,会很麻烦

2- 创建一个存储过程 | Creating a Stored Procedure_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=69&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 创建一个叫get_clients的存储,内容是存储clients表格中的所有信息
    DELIMITER $$
    CREATE PROCEDURE get_clients()
    BEGIN
          SELECT * FROM clients;
    END $$
    DELIMITER ;

    SELECT * FROM clients后面需要加上分号,因为这已经是一条语句了;
    如果我们想执行下面这段代码,而不是只有SELECT * FROM clients,那么就需要用DELIMITER函数更改默认分隔符,修改完之后别忘记改回来
    CREATE PROCEDURE get_clients()
    BEGIN
          SELECT * FROM clients;
    END $$
    运行完之后,我们可以在左边SCHEMAS的sql_invoicing中找到Stored Procedures,里面就有get_clients这个存储,点击get_clients旁边的⚡,就可以得到所有的clients信息
  2. 调用get_clients
    CALL get_clients()

【练习题】
创建一个名为get_invoices_with_balance(有结余的发票),返回所有结余大于0的发票
DELIMITER $$
CREATE PROCEDURE get_invoices_with_balance()
BEGIN SELECT * FROM invoices_with_balance WHERE balance > 0;
END $$
DELIMITER ;

因为我们之前创建了invoices_with_balance,所以可以直接用这个

3- 使用MySQL工作台创建存储过程 | Creating Procedures Using MySQLWorkbench_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=70&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 如果觉得每次创建储存过程都需要更改默认符很麻烦,右击SCHEMAS中sql_invoicing中Store Procedures,再点击Create Stored Procedure,在这里窗口就不用但需需要更改默认分隔符了
    例如,创建一个名为get_payments的存储过程先按张上面的流程创建,然后将new_procedure改为get_payments,然后在BEGIN后换行输入SELECT * FROM payments;,然后点击Apply,可以看到MySQL自动帮我更改了默认符,然后再点击Apply,Finsh,就可以了

4- 删除存储过程 | Dropping Stored Procedures_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=71&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 删除名为get_clients的存储过程
    DROP PROCEDURE get_clients
  2. 如果我们再执行一次上面的代码,会发现MySQL报错,这是因为没有名为get_clients的存储,所以为了MySQL不报错,我们可以把代码改成
    DROP PROCEDURE IF EXISTS get_clients
  3. 一般我们在创建存储的时候,都是这样的(创建存储的基本框架)
    DROP PROCEDURE IF EXISTS get_clients;
    DELIMITER $$
    CREATE PROCEDURE get_clients()
    BEGIN
          SELECT * FROM clients;
    END $$
    DELIMITER ;

5- 参数 | Parameters_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1UE41147KC?p=72&vd_source=eaeec77dfceb13d96cce76cc299fdd08

  1. 创建一个名为get_clients_by_state,按州来获取顾客信息
    DROP PROCEDURE IF EXISTS get_clients_by_state;
    DELIMITER $$
    CREATE PROCEDURE get_clients_by_state(state CHAR(2))
    BEGIN
        SELECT * FROM clients c
        WHERE c.state = state;
    END $$
    DELIMITER ;

    CHAR(2)表示有两个字符的字符串,比如CA、LA,当遇到电话号码、姓名和信息等,可以用VARCHAR,除非我们可以确定字符串的长度;
    如果有很多参数,那么就在state CHAR(2)后面用逗号分割;

    如果我们想找到住在CA的顾客,那么可以输入CALL get_clients_by_state('CA'),如果在括号中不填入任何值,MySQL会报错

【练习题】
创建一个名为get_invoices_by_client的存储过程,按照顾客的id来获取发票信息

USE sql_invoicing;
DROP PROCEDURE IF EXISTS get_invoices_by_clients;
DELIMITER $$
CREATE PROCEDURE get_invoices_by_clients(client_id INT)
BEGIN
    SELECT * FROM invoices i WHERE i.client_id = client_id;
END $$
DELIMITER ;

获取的是发票信息,所以是FROM invoices;
可以通过点击invoices表旁边的工具按钮,看Datatype这一列,就可以找到client_id的数据类型,可以确认为INT

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

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

相关文章

RabbitMQ 入门(三)SpringAMQP

一、Spring AMQP 简介 SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。 SpringAmqp的官方地址:https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能: - 自动…

搭建`mongodb`副本集-开启权限认证 mongo:7.0.5

搭建mongodb副本集-开启权限认证 mongo:7.0.5 1.5.1、创建文件 创建配置文件保存目录和数据保存目录 mkdir -p /data/mongodb/{/conf,/data,/logs}生成和设置权限 这个文件一定要在一个服务里面生成然后复制到其它服务器,所有服务器的这个key一定是相同的。 op…

移动技术开发:保存密码和自动登录

1 实验名称 保存密码和自动登录 2 实验目的 掌握利用SharedPreference实现记住密码和自动登录功能。 3 实验源代码 布局文件代码&#xff1a; &#xff08;1&#xff09;activity_main.xml <?xml version"1.0" encoding"utf-8"?> <TableLa…

【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet

【深度学习】经典的深度学习模型-02 ImageNet夺冠之作: 神经网络AlexNet Note: 草稿状态&#xff0c;持续更新中&#xff0c;如果有感兴趣&#xff0c;欢迎关注。。。 0. 论文信息 article{krizhevsky2012imagenet, title{Imagenet classification with deep convolutional n…

智能巡检机器人与智慧运维系统的结合应用

一、传统配电运维的困境 传统配电运维面临诸多难题。首先&#xff0c;劳动强度大&#xff0c;运维人员需要手持终端设备对配电站室内环境、电气设备上的各个仪器仪表参量等进行定时巡视&#xff0c;工作繁琐且易疲劳。其次&#xff0c;效率低下&#xff0c;巡查间隔时间较长&a…

构建高效购物推荐系统:SpringBoot实战

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

2014年国赛高教杯数学建模D题储药柜的设计解题全过程文档及程序

2014年国赛高教杯数学建模 D题 储药柜的设计 储药柜的结构类似于书橱&#xff0c;通常由若干个横向隔板和竖向隔板将储药柜分割成若干个储药槽(如图1所示)。为保证药品分拣的准确率&#xff0c;防止发药错误&#xff0c;一个储药槽内只能摆放同一种药品。药品在储药槽中的排列…

前端开发攻略---前端ocr图片文字提取功能

1、引入资源 通过链接引用 <script src"https://cdn.bootcdn.net/ajax/libs/tesseract.js/5.1.0/tesseract.min.js"></script> npm或其他方式下载 npm i tesseract 2、示例 <!DOCTYPE html> <html lang"en"><head><meta…

手写mybatis之细化XML语句构建器,完善静态SQL解析

前言 1&#xff1a;在流程上&#xff0c;通过 DefaultSqlSession#selectOne 方法调用执行器&#xff0c;并通过预处理语句处理器 PreparedStatementHandler 执行参数设置和结果查询。 2&#xff1a;那么这个流程中我们所处理的参数信息&#xff0c;也就是每个 SQL 执行时&#…

RetinaNet 分类头和回归头的网络结构分析

RetinaNet 是由 Facebook AI Research&#xff08;FAIR&#xff09;在 2017 年提出的一种高效的一阶段&#xff08;one-stage&#xff09;目标检测算法。相比于两阶段&#xff08;two-stage&#xff09;方法&#xff0c;RetinaNet 通过引入 Focal Loss 解决了类别不平衡问题&am…

iOS 14 自定义画中画悬浮窗 Custom AVPictureInPictureController 实现方案

iOS 14&#xff0c;基于 AVPictureInPictureController&#xff0c;实现自定义画中画&#xff0c;涵盖所有功能与难点。 市面上的各种悬浮钟和提词器的原理都是基于此。 Demo源码在文末。 使用 iOS 画中画的要求&#xff1a; 真机&#xff0c;不能使用模拟器&#xff1b;iO…

SpringCloud-服务治理-Eureka

本篇是从基础方便讲解一些springcloud-服务治理-Eureka中的一些理论性的故事&#xff1b;具体的代码不详细展示&#xff1b;后面的文章会将源码进行整理&#xff0c;并且将源码的github地址上传。 1.什么是服务治理 专治分布式系统 (一)高可用性&#xff1a;服务治理框架保证…

高级IO之IO多路转接

高级I/O&#xff08;Advanced I/O&#xff09;是指在计算机系统中进行输入和输出操作时使用的一种更高级的接口和技术。也就是当我们进行输入输出的时候本质其实都要进行等待内核缓冲区中数据到来才能进行读取和写入到用户缓冲区。而往往在等待的阶段都是需要进行阻塞的。而高级…

React远程组件

什么是远程组件&#xff1f; 远程组件指的是从远程服务器动态加载的组件&#xff0c;这些组件可以是React、Vue等框架的组件。 为什么需要远程组件 本质上就是为了解决复用问题&#xff0c;那引出新的问题有几种公共项目代码复用方式&#xff1f; Git仓库 将公共代码单独抽…

【vue3】实现el-tree组件,将不同层级的箭头修改成自定义图标

效果图 <template><div class"menu"><div class"menu_list"><el-treeref"myTree":highlight-current"true":current-node-key"person.treeCheckedData"node-key"Id":default-expanded-keys&…

【AAOS】Android Automotive 11模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r48 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch car_x86_64-userdebug make -j12 运行效果 emualtor Home Map All apps Setting…

spring:springboot3使用Spring Security

介绍 Spring Security 是一个强大且高度可定制的安全框架&#xff0c;专为保护基于 Java 的应用程序而设计&#xff0c;尤其是 Spring 应用。它提供了一系列功能&#xff0c;帮助开发者实现身份验证&#xff08;Authentication&#xff09;、授权&#xff08;Authorization&am…

【C++】map和set的介绍以及用法

个人主页 文章目录 ⭐一、系列式容器和关联式容器&#x1f680;二、set的使用1. set类的介绍2. set的构造3. set的迭代器4. set的常用函数 &#x1f3a1;三、multiset&#x1f384;四、map类的使用1. map类的介绍2. map的构造3. map的迭代器4. map的operator[]5. map的常用函数…

Go语言中的控制结构(四)

Go语言中的控制结构详解 控制结构是编程语言中控制代码执行流程的核心部分&#xff0c;Go语言通过if、for、switch等常见的控制结构&#xff0c;以及独有的defer、panic、recover机制&#xff0c;提供了强大且简洁的控制流管理。本文将详细讲解Go语言中的控制结构&#xff0c;包…

第十四章 RabbitMQ延迟消息之延迟队列

目录 一、引言 二、死信队列 三、核心代码实现 四、运行效果 五、总结 一、引言 什么是延迟消息&#xff1f; 发送者发送消息时指定一个时间&#xff0c;消费者不会立刻收到消息&#xff0c;而是在指定时间后收到消息。 什么是延迟任务&#xff1f; 设置在一定时间之后才…