MySQL--视图、存储过程、触发器

1、视图
        1、定义:

                所谓的视图是一种虚拟存在的表,视图中的数据并不在数据库中实际存在,就是视图只保存了查询的SQL逻辑,不保存查询的结果,所以在创建视图的时候,主要的工作就是落在创建这条SQL查询语句的时候。


创建一个视图:

create view 视图的名称 as select 语句

create  view  stu_v as select  id , name from student ;

查询视图:

show  create view 视图的名称;


查询视图表中的数据:

select  * from 视图表的名称;

修改视图的命令:

alter  view 视图的名称 as  select  语句;


删除视图:
 drop  view [if exists ]视图的名称;
        2、视图的检查选项:

                当使用with check option子句在创建视图的时候,MySQL会通过视图检查正在修改的每一行的数据,查看是否符合视图的定义。MySQL允许基于一个视图创建另一个视图,还是会检测依赖视图中的规则,以保证规则的一致性,为了检查范围,mysql提供了两种选项:cascaded和local,默认使用的是cascaded


1、cascaded:

例如:
    create  view  stu_v as select  id ,name ,age from student where age >10 with cascaded check option;

此时如果对上面的视图进行修改的时候,此时就会判断修改的是否符合修改的规则,如果不符合,那么就不会进行修改。

create  view  stu_v as select  id ,name ,age from student where age >10 ;

create   view  stu_v1 as select  id ,age from stu_v where age > 5 with cascaded check option;


此时因为视图stu_v1是依赖于视图stu_v之上进行的查询,此时当修改视图stu_v1时,会判断是否符合stu_v1的规则,也会去判断是否符合stu_v的规则。也就相当于在stu_v后面也添加了with cascaded check option;


2、local:

与cascaded是基本一致的,对于依赖的视图中,如果有条件,就会去判断是否符合条件,如果没有,那么就不会去判断以来的视图。



create  view  stu_v as select  id ,name ,age from student where age >10 with local check option;




create  view  stu_v as select  id ,name ,age from student where age >10 ;

create   view  stu_v1 as select  id ,age from stu_v where age > 5 with local check option;


此时的stu_v1是依赖于stu_v。
3、视图更新

对于视图能更新的前提就是视图中的行和基础表中的行之间是一一对应的。对于存在聚合函数、窗口函数、distinct、having、group by、union的是不能更新视图的。

4、视图的作用:

        1、简单,可以简化用户对数据的理解,也可以简化他们的操作,可以对于那些常用的语句进行视图操作,以至于以后该操作就需要在指定全部的条件。

        2、安全,数据库可以授权,但是不能授权到数据库特定的行和列中,可以通过视图用户可以查询和修改能看见的数据。

例如:在学生系统中,只能让用户看见学生的姓名和学号,此时可以使用视图进行操作

创建一个视图
      create  view  stu_v  as select  id ,name  from student ;

此时用户可以从该视图中查询学生的姓名和学号

      select  id,name from stu_v where id =001;

        3、数据独立,视图可以帮助用户屏蔽真是表结构改变带来的影响。如果在基础表中,某一列发生改变了, 此时可以通过更新视图表与基础表保持一致,但是可以将原先的列名作为别名,此时视图表的结构并没有发生改变。

2、存储过程:
        1、定义

        所谓的存储过程指的是事先编译并存储在数据库中的一点SQL的集合,调用存储过程可以简化数据在数据库和应用服务器之间的传输,可以提高数据处理的效率。

特点:封装、复用、可以接受参数、也可以返回数据、减少网络的交互、效率提高。

1、创建存储过程:

create  procedure 存储过程的名称 ()
begin

    执行的SQL语句;

end;



例如:

 create  procedure  stu ()
begin   
  select  * from student ;

end;



2、调用存储过程:
    call  存储过程的名称 (参数);

例如:
call stu() ;


3、查看存储过程:
show procedure 存储过程的名字;

例如:
show procedure stu();


4、删除存储过程:
drop  procedure   存储过程的名称;

例如:
drop  procedure  stu;
        2、变量 
变量:

1、变量主要分成三种变量:系统变量、用户自定变量、局部变量

2、系统变量:
    主要分成两种:全局变量(global)、会话变量(session)
        全部变量:作用在全局
        会话变量:作用在当前会话内,与其他的会话不会产生影响。

查看系统的全局、会话变量:
show [ global/session ]variables;


设置系统变量:
语法:set [global/session] 环境参数;
set  session  sutocommit = 0;




3、用户自定变量:是用户根据自己的需求定义的变量,作用域只在当前的会话中。

    赋值:语法格式:set @变量名 = 变量参数
    使用:select @变量名;

4、局部变量:指的是在局部生效的变量,在访问之前是需要declare进行声明的,局部变量生效的范围是在begin...end之间。

声明的语法:declare 变量名 变量的类型;

对局部变量进行赋值:set 变量名 = 值
                   或者 select  字段名 into 变量名 from 表名
3、存储函数:

4、触发器:
        1、定义

触发器是与表有关的数据库对象,会在增删改之前或之后进行触发在触发器中定义的SQL的语句集合。使用OLD和NEW来引用触发器中数据发生变化的记录的内容。

        2、触发器的类型
触发器的种类:
    1、insert触发器
    2、delete触发器
    3、update触发器



查看触发器

show  trigger ;

删除一个触发器

drop trigger  数据库的名称 触发器的名称
5、Mysql的锁:
        1、锁:是计算机中多个线程和进程并发访问某一个资源的机制。主要可以分成三类:

                1、全局锁:锁定的数据库中所有的表

                2、表级锁:锁定的是每一次操作的整张表

                3、行级锁:锁定的是每一次操作对应的行数据

        2、全局锁:

全局锁是对整个数据库实例加锁,在加锁之后整个数据就变成了一个只读的状态,后续的DML、语句、DDL语句和已经更新操作的事务提交语句都将被阻塞。

最典型的引用应用:在进行数据库全库的逻辑备份的时候,对所有的表进行全局锁,从而获取一致性视图,保证数据库的完整性。

在MySQL中的数据备份指定是将数据变成一个SQL文件存储到磁盘中。


1、添加全局锁:
flush  table with read lock;

//对数据进行备份在window中执行:

mysqldump -u  用户名  -p 密码  指定需要备份的数据库的名称  > 指定数据库中的数据存储到那个SQL文件中。

2、解锁全局锁:


unlock table ;



3、在INNODB 计算引擎中,我们可以在备份的时候加上参数  --single-transaction 参数来完成不加锁的一致性数据备份。



mysqldump  --single-transaction  -u  用户名  -p  密码  指定需要备份的数据库  > 指定数据库中的数据存储到哪一个SQL文件中。

全局锁的特点:

        1、如果在主数据库中添加全局锁,在备份期间数据是不能进行更新、插入、删除的操作。

        2、如果在从数据库中备份,那么从库就不能执行主库同步过来的二进制日志。会导致主从延迟。 

        3、表级锁:

又可以分成表锁、元数据锁(meta data lock,MDL)    、意向锁

                1、表锁:

对于表锁又可以分成两种:表共享读锁(read lock)、表独占写锁(write  lock)

 1、表共享读锁(read lock):

加上表的读锁,当前客户端只能读取数据,不能写入数据,并且不会阻碍其他的客户端的读操作,会阻碍其他客户端的写操作。

 2、表独占写锁(write  lock):

加上了写锁,当前客户端既可以读取数据也可以写入数据,单数对于其他的客户端既不能读数据,也不也能写入数据。

对表进行加锁:

lock table  表名...[可以是多张表] read/write


释放锁:

unlock  tables /也可以通过断开客户端的连接来释放表锁。

               2、元数据锁(meta data lock,MDL)

MDL加锁的过程是系统自动控制的,在访问一张表的时候会自动的加上。他的主要作用是维护数据一致性,当表上有活跃的事务的时候,此时就不可以对元数据进行写入操作。 

在MySQL5.5中引入了MDL,当对一张表进行增删改的时候,加上的MDL读锁(共享锁),当对表的结构进行改变的时候,加上DML写锁(排他锁)

    ,

            3、意向锁:

为了避免DML在执行的时候,加的行锁和表锁之间的冲突,在INNODB中引入意向锁,是的表锁不用检查每行是否加锁,使用意向锁来减少表锁的检查。

                        1、意向共享锁(IS):

select  .... lock  in share mode 

                        2、意向排他锁(IX):

insert  update  delete  select .... for update 

        4、行级锁:

行级锁,每次操作锁住对应的行数据,锁定的力度最小,发生锁冲突的概率最低,并发度是最高的。应用在INNODB存储引擎中。

主要分成三种:

        InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。对于行级锁,主要分为以下三类

        1. 行锁(Record Lock):锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC、RR隔离级别下都支持。
        2间隙锁(Gap Lock):锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持

        3.临键锁(Next-Key Lock)∶行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。在RR隔离级别下支持

lnnoDB实现了以下两种类型的行锁:

        1.共享锁(S)∶允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。

        2.排他锁(X)∶允许获取排他锁的事岛更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。

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

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

相关文章

web 渗透 信息搜集

一 收集域名信息 1.whois查询 whois(读作“Who is”,非缩写),标准的互联网协议&#xff0c…

Vue 模板语法 v-bind

红色框里面的都是vue的模板。有了模板就得有模板的特殊语法。上面只是简单的双括号加上表达式,这种叫做插值语法,除了这种语法还有其他语法吗? 插值语法实现的功能很单一,就是将指定的值放到指定的位置。还有一种叫做指令语法&am…

光伏仪器-87110A/B太阳辐照度计

87110A/B 太阳辐照度计 光伏仪器 一款小巧、全数字化的太阳辐照度测试仪表,通过标准太阳电池测试太阳辐照度,并自带温度修正功能。太阳辐照度计集成了环境温度、电池板温度、倾斜角等测试功能,可以通过附带的蓝牙或串行接口连至电脑或智能…

多种格式图片可用的二维码生成技巧,快来学习一下

将图片存入二维码是现在很常见的一种图片展现方式,有效的节省了图片占用内容空间以及获取图片内容的速度,所以现在会有很多人将不同的图片、照片生成二维码展示。如何使用图片二维码生成器来快速生成二维码呢?下面就让小编来给大家分享一下图…

CV计算机视觉每日开源代码Paper with code速览-2023.11.13

精华置顶 墙裂推荐!小白如何1个月系统学习CV核心知识:链接 点击CV计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构:Transformer】PolyMaX: Gener…

Intel 网卡使用iPXE固件

1、下载ipxe源码 https://git.ipxe.org/ipxe.git/tree 2、编译ipxe 1) 先使用lspci -nn|grep -i eth查询当前网卡的device id,如: 2)编译ipxe,可以选择编译legacy的rom,也可以选择编译uefi的rom&#x…

Redis缓存击穿、雪崩、穿透!(超详细)

作者前言: 为了解决Redis的缓存的问提也是在网上找了很多文章来了解,我感觉这篇文章非常好,希望大家了解一下,也是吧这篇文章归类了一下,可以直接在目录中找 缓存的击穿、穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题。 不过,…

算法-双指针-简单-移动零

记录一下算法题的学习2 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2…

solidworks怎么识别STEP文件特征?

solidworks怎么识别stp文件特征? Chapter1 solidworks怎么识别STEP文件特征? Chapter1 solidworks怎么识别STEP文件特征? 原文连接:https://baijiahao.baidu.com/s?id1744633829345140540&wfrspider&forpc step或者stp…

第八章:枚举

系列文章目录 文章目录 系列文章目录前言一、枚举总结 前言 类可以作为常量使用。 一、枚举 枚举是一组常量的集合。可以这里理解: 枚举属于一种特殊的类, 里面只包含一组有限的特定的对象。 枚举的实现方式自定义类实现枚举使用 enum 关键字实现枚举…

springBoot 入门一 :创建springBoot项目

创建springBoot项目 配置maven 项目报错处理

水库大坝安全监测预警系统的重要作用

水库大坝建造在地质构造复杂、岩土特性不均匀的地基上,在各种荷载的作用和自然因素的影响下,其工作性态和安全状况随时都在变化。如果出现异常,又不被及时发现,其后果不堪设想。全天候实时监测,实时掌握水库水位、雨情…

python链表_递归求和_递归求最大小值

创建一个单链表: class LinkNode: #设置属性def __init__(self,data None):self.data dataself.next None class LinkList: #设置头结点def __init__(self):self.head LinkNode()self.head.next Nonedef CreateListR(self,a): …

概率论和数理统计(四)方差分析与回归分析

前言 实际场景中,也需要研究两个变量的关系.检验也可能出现两个以上的总体. 方差分析 假设检验中,若需检验 H 0 : μ 1 μ 2 , H 1 : μ 1 ̸ μ 2 H_0:μ_1μ_2,H_1:μ_1 \notμ_2 H0​:μ1​μ2​,H1​:μ1​μ2​&#x…

【问题思考总结】第一型曲线积分和第二型曲线积分的区别与联系【从几何知识的角度思考】

此处为曲面积分------>第一型曲面积分的第二型曲面积分的区别与联系【从几何知识的角度思考】 问题 在做题的时候,我发现,关于这方面的知识有很多很多,但是每道题的解法不尽相似,也没有什么具体的体系,尤其是在结…

香港:考虑将虚拟资产列为投资移民资产

11 月 13日消息,香港政府在重新启动投资移民计划后,正考虑将持牌虚拟资产交易平台的比特币等虚拟资产列为可接受的投资项目。这一措施旨在折大投资移民的资产范围,以吸引更多高净值人士在香港落户。尽管有声音呼吁将房地产投资纳入资格范围&a…

LMI相机配置步骤,使用Gocator2550相机

在此之前可以先浏览我编写的相机SDK通用类和LMISDK,进行配套观看 https://blog.csdn.net/m0_51559565/article/details/134404394 //LMI相机SDK https://blog.csdn.net/m0_51559565/article/details/134403745 //相机通用类1.启动LMI加速器 LMI加速器用于将相机…

微信公众号会员系统怎么做

一、引言 在这个信息爆炸的时代,微信公众号已经成为了企业和个人品牌的重要宣传阵地。而在公众号运营过程中,会员系统是非常重要的一环。通过建立会员系统,你可以更好地管理粉丝、提升用户黏性,让你的品牌更加强大。本文将为你详…

光纤接入网是怎么操作

大家还记得我们通过运营商提供的网线甚至是电话线上网的经历吧,那时上网使用xDSL(数字用户线路,Digital Subscriber Line)网络技术,xDSL技术是数字用户线路的所有类型的总称,包括RADSL、SDSL、HDSL、ADSL、…

太好玩了,爬虫、部署API、加小程序,一条龙玩转知乎热榜

一直想做一个从爬虫到数据处理,到API部署,再到小程序展示的一条龙项目,最近抽了些时间,实现了一个关于知乎热榜的,今天就来分享一下! 由于代码还没有完全整理好,今天只给出一个大致的思路和部分…