网络安全快速入门(十)MySQL拓展操作

10.1.0前言

前面我们已经对用户操作以及库,表操作有了基础的认识,接下来我们来在之前已经学过的一些操作进行进一步拓展,本章我们主要了解以下几个知识点:

  • 数据库设计方法
  • 视图
  • 存储过程
  • 事务

我们开始本章的内容吧

10.2 数据库设计方法

(注意:本小节仅仅带大家做一个了解)

前面我们在第七章的时候曾经提到过,数据库分为两种:

  • 关系型数据库
  • 非关系型数据库

而我们之前也提了一嘴,关系型数据库(是一个结构化数据库,通过关系模型来组织数据的数据库)。而这种关系模型被称为E-R模型(Entity-Relationship Model)实体-联系模型。

(在这里我们对er关系模型进做一个简单的了解,了解目的仅仅为了通过E-R模型将两个表进行主外键关联,因此我们不会过多赘述,希望各位读者见谅!)

E-R模型基本元素:

  • 实体
  • 属性
  • 标识符
  • 联系

这里我们设想做一个设想:

  • 实体就相当于表中的全部数据
  • 属性就相当于表中字段
  • 标识符可以理解为主键外键
  • 联系的话就相当于表与表之间的联系

而表与表之间的联系类型又可以分为下面几种类型:

  • 一对一
  • 一对多
  • 多对多

这里我们只用一对一联系举例,其他联系的话建议点击下面链接

数据库设计之E-R模型

我们只需要知道,我们是通过一个主键和一个外键将表与表进行连接。

这里我们要扩展一个小知识了:

  • 主键:是用于在表中唯一的标识一个字段
  • 外键:外键是另外一个表主键,通过使用外键,可以将两个表关联起来

这里需要注意:

         外键和外键可以进行连接,外键和主键也可以进行连接,主键和主键之间也可以进行连接。但是这里需要注意的是,主键和主键连接过程中,会默认将前表设为主表,两个表的全部内容都显示出来,形成一个自然连接。

这里可能就有同学有疑问了,我们通过链接查询就可以获取连接结果了,为什么还要使用这个联接呢?这离我们要知道的是,链接查询仅仅是我们所认为可以联合的链接,计算机并不会认为可以形成链接。而在该方法中,是数据库通过表与表进行连接,该链接一般来讲不会轻易丢失!!!

我们现在看一下连接格式

foreign key (字段名) references 表名2(字段名)

我们举个例子来看一下具体如何联系

我们先创建一个表tb2,创建格式如下

create table tb2( 
classid int primary key, 
name char(30));

然后创建表tb1,并与tb2通过classid进行链接。使用以下命令

create table tb1( 
id int primary key, 
name char(30), 
classid int, 
foreign key(classid) references tb2(classid)) 

我们来看结果

连接成功

        因为能力有限,笔者也仅仅让各位了解一下这个功能,如果想了解更多关于E-R模型和表结构的知识,可以查看点击下面链接进行进一步学习

关系型数据库与非关系型数据库

MYSQL数据库主键和外键,内连接和外连接,关联子查询

数据库设计之 E-R 模型

10.3 视图

        前面我们在进行用户授权时我们知道,在对用户进行授权时我们会给他们一整张表的所有权限,而在工作中我们可能只需要给这张表的部分权限授权给用户,这个时候我们就要用到视图了。

视图是什么?

  • 视图可以认为是一张表
  • 但是这表表存在内存中的虚表,断电后会消失

视图的作用:

        通过视图,可以让用户只能访问数据库中一部分数据(需要给用户授权查看视图权限!)

说白了,就是让目标用户只能看到给定表中的给定的数据,并且该表存在于内存中,断电就丢失。

我们直接来看格式

创建视图格式:

create view 视图名 as select 语句

还是老规矩,举例演示一下

现有表scores,表中数据如下

我们创建一个视图stuid3,要求只能查看stuid为三的视图

create view stuid3 as select * from scores where stuid=3

我们来看一下创建好的视图

ok,视图没毛病,接下来我们给用户jerry进行授权,让他可以查看该视图

grant all on hellodb.stuid3 to "jerry"@"localhost" identified by "123456"

接下来我们来看一下jerry视角

表中没数据,视图中可以查看,没毛病。下一个

10.4 调用/使用存储过程

这个东西类似于其他计算机语言的函数,通过写一些简单的脚本存放在存储过程命中,使用时进行调用,一般用于想数据库内快速写入大量数据。

我们还是先来看一下格式:

定义存储过程格式:

delimiter // #存储过程的开头,定义一个符号
create procedure 存储过程程() #定义存储过程名字
begin
sql语句
end //

调用/使用存储过程的格式:

call 存储过程名()

接下来我们举例来看理解这个东西

现有表tb1,表结构如下

现在我们通过存储过程向表中插入一千条数据:

命令格式及每行语义如下

delimiter // #定义开头
create procedure m3() #创建存储过程,m3
begin #开始存储过程
declare i int; #declare定义变量i,类型是整型
set i = 0; #设置将i的值为0
while i<1000 do #当i小于1000是执行循环
insert into tb1(id) values(i);
#向表中插入数据
set i = i + 1; #将i的值加1
end while; #循环结束
end // #定义结束
delimiter;

我们开始调用该存储过程

call m3()

我们开始看结果

id从0到999,插入了一千条数据,证明程序成功

注意:在使用数据存储中,必须将定义存储过程写在调用数据存储过程的上方,否则会运行不起来!!!

10.5 事务

        事务,说白了就是将数据库的多个命令放到一起进行运行,从而能一下子做好多事情。具体特点如下:

  • 将多个sql语句组合成一个整体,这个整体就是一个事物
  • 事物中的所有语句要么都执行,要么都不执行
  • 通过使用事物,可以保证数据的一致性

事务有以下两个操作:

  • 启动事务
  • 提交事物
  • 回滚事物

启动事务

先启动事务才能执行操作,启动事务命令如下:

begin

提交事务

在启动事务之后,我们写完命令就可以通过提交命令对事务进行提交以便进行数据执行。数据执行的命令如下:

commit

在执行提交事务时需要注意以下几点:

  • 让事物中的sql语句,真正的生效
  • 如果使用了事物,那么在事物提交之前,其他用户是看不到事务中的操作的

在使用提交事务之后,我们会发现难免会有一些sql语句没有执行成功,因此,为了保持数据的一致性,我们可能要重新检查命令去执行,因此我们要用到事务的回滚操作

事务回滚:

  • 事务中的语句,如果只有部分执行成功,那么就需要将这个事物进行回滚操作
  • 回滚:将数据恢复到执行之前的状态

说白了,这个命令类似于游戏中的重新开始,丢失全部数据,重新通过事务进行提交,从而保持数据的一致性。

回滚事务格式

rollback

(这里我们专业不是很常用,因此我们仅仅做了解,如需要了解详细内容请查看下面博客)

MySQL事务(transaction) (有这篇就足够了..)

好了,MySQL到这里为止就讲完了,接下来我们将将继续深入Linux,创作过程中难免有些问题,如有不足,请指正。最后感谢各位的观看,我们linux见!!0v0

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

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

相关文章

Java代理模式的实现详解

一、前言 1.1、说明 本文章是在学习mybatis框架源码的过程中&#xff0c;发现对于动态代理Mapper接口这一块的代理实现还是有些遗忘和陌生&#xff0c;因此在本文章中就Java实现代理模式的过程进行一个学习和总结。 1.2、参考文章 《设计模式》&#xff08;第2版&#xff0…

阿里云服务器下,部署LNMP环境安装wordpress

目录 1 LNMP部署1、简单说明2、nginx部署3、php8 安装4、mysql8安装5、配置 nginx 实现支持 PHP 程序6、安装 php 组件7、测试 2 wordpress部署1、安装2、配置 总结 1 LNMP部署 1、简单说明 首先需要明白&#xff0c;LNMP指的是Linux、Nginx、MySQL、PHP。而如果使用阿里云服…

代码随想录—— 填充每个节点的下一个右侧节点指针(Leetcode116)

题目链接 层序遍历 /* // Definition for a Node. class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val _val;}public Node(int _val, Node _left, Node _right, Node _next) {val _val;left _…

视频提取动图怎么制作?一个方法将视频转换gif

现在这个日益发展的科技社会&#xff0c;视频作为我们广泛应用的一种媒体形式&#xff0c;在各个领域都扮演着重要的角色。视频凭着丰富生动的内容成为传递信息的媒介。但是视频的体积也是比较大的&#xff0c;在使用的过程中会受到各种各样的限制。这个时候就可以使用gif在线制…

根据Word文档用剪映批量自动生成视频发布抖音

手头有大量word文档&#xff0c;想通过剪映的AI图文成片功能批量生成视频&#xff0c;发布到抖音平台&#xff0c;简单3步即可&#xff1a; 第一步&#xff1a;把word文档或者PDF等文档转成txt文本&#xff0c;可以用一些软件&#xff0c;也可以用AI工具&#xff0c;具体常见文…

LLM Agent智能体综述(超详细)

前言 &#x1f3c6;&#x1f3c6;&#x1f3c6;在上一篇文章中&#xff0c;我们介绍了如何部署MetaGPT到本地&#xff0c;获取OpenAI API Key并配置其开发环境&#xff0c;并通过一个开发小组的多Agent案例感受了智能体的强大&#xff0c;在本文中&#xff0c;我们将对AI Agent…

《灵摆疗法》PDF完整版阅读

译者序 神奇丶快速又有效的灵摆疗法 2008年当我开始走上自己的灵性道路时就与灵摆结下了不解之缘当时我非常热衷于水晶疗愈所以疯狂地搜集各种不同的矿石学习如何将矿石 和水晶灵摆连结起来做能量疗愈后来在我开设马雅心能量课程时也会教大家如何使用水晶灵摆 …然而这两年来不…

Python GUI开发- PyQt5 开发小工具环境入门

前言 常见的python开发gui的库有 Tkinter&#xff0c; PyQt5&#xff0c; wxPython等。本教程是选择PyQt5 开发桌面小工具。 环境准备 只需pip安装即可快速准备好开发环境 pip install pyqt5快速开始 创建一个空的window窗口 Qapplication()&#xff1a;每个GUI都必须包含…

SpringBoot--@Autowired注入HttpServletRequest是否线程安全?

原文网址&#xff1a;SpringBoot--Autowired注入HttpServletRequest是否线程安全&#xff1f;_IT利刃出鞘的博客-CSDN博客 简介 本文用实例结合源码来说明Autowired注入HttpServletRequest是线程安全的。 SpringBoot获取HttpServletRequest有多种方式&#xff0c;见&#xf…

免费思维13招之十二:耗材型思维

免费思维13招之十二:耗材型思维 今天给你分享免费思维的两个子思维——相关性耗材思维和非相关性耗材思维。 相关性耗材思维,是指有一些产品的使用,需要大量的相关耗材,从而对该产品进行免费,而耗材进行资费。 举例:全世界最大的一家直销公司叫安利,它的明星产品是净水…

Axure网上超市用户端APP原型 (O2O生鲜电商/买菜到家/数字零售/京东到家/抖音超市领域)

作品概况 页面数量&#xff1a;共 100 页 源文件格式&#xff1a;rp格式&#xff0c;兼容 Axure RP 9/10&#xff0c;非程序软件无源代码 适用领域&#xff1a;O2O生鲜电商、网上超市、买菜到家、数字零售 作品特色 本作品为网上超市用户消费端Axure交互原型&#xff0c;属于…

BUUCTF——大流量分析一、二、三题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

Spring Boot:异常处理

Spring Boot 前言使用自定义错误页面处理异常使用 ExceptionHandler 注解处理异常使用 ControllerAdvice 注解处理异常使用配置类处理异常使用自定义类处理异常 前言 在 Spring Boot 中&#xff0c;异常处理是一个重要的部分&#xff0c;可以允许开发者优雅地处理应用程序中可…

Spring WebFlux 初探-响应式编程-021

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Nex…

[HUBUCTF 2022 新生赛]ezsql

测试无结果 扫描目录&#xff0c;得到源码 找到注入点 思路&#xff1a;更新资料的时候可以同时更新所有密码 我们需要知道密码的字段名 爆库 nicknameasdf&age111,description(select database())#&descriptionaaa&token31ad6e5a2534a91ed634aca0b27c14a9 爆表…

外网ip地址怎么获取?快解析

大家都清楚互联网是通过ip地址通信的&#xff0c;ip地址又分内网ip和外网ip。内网ip只能在内网使用&#xff1b;而外网ip作为电脑唯一标识&#xff0c;可在公网使用。那么外网ip地址怎么获取呢&#xff1f; 外网ip是网络运营商分配给用户的。目前最常见的两种上网方式一个是拉…

Muse论文精读

Muse Abstract 我们介绍了Muse&#xff0c;一个文本到图像的Transformer模型&#xff0c;它实现了最先进的图像生成性能&#xff0c;同时比扩散或自回归模型更有效。Muse是在离散标记空间中的掩码建模任务上进行训练的:给定从预训练的大型语言模型(LLM)中提取的文本嵌入&…

【保姆级介绍下运维】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

nginx反向代理使用(详细版)

1. 下载nginx&#xff0c;解压&#xff1b;&#xff08;随便放在哪里&#xff09; 2. 在nginx-1.26.0文件夹下创建web文件夹&#xff0c;继续在web文件夹下创建abcd.test.cn文件夹&#xff08;文件夹的名字就叫abcd.test.cn&#xff09;&#xff1b; 3. 配置前端代理&#xff…

【现代C++】三路比较运算符

C20引入了三路比较运算符&#xff08;也称为太空船运算符&#xff0c;<>&#xff09;&#xff0c;它允许同时比较两个值&#xff0c;并返回它们的相对顺序。这个运算符简化了需要定义多个比较运算符&#xff08;如、!、<、<、>、>&#xff09;的类的代码&…