MySQL-10. 存储引擎、视图、mysql管理

news2024/10/7 10:15:00

10.1 存储引擎

        存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
  • 存储引擎(Storage Engines)主要包括MyISAM、innoDB、Memory等。
  • MySQL的表类型由存储引擎决定。
  • MySQL 数据表主要支持六种类型:CSV、Memory、ARCHIVE、MRG MYISAM、MYISAM、InnoBDB。根据是否支持事务,将六种类型分为两大类:”事务安全型”(transaction-safe),比如:InnoDB;其余都属于第二类,称为”非事务安全型”(non-transaction-safe)[mysiam 和memory]。
  1. MyISAM:mysql最早提供。不支持事务和外键,但其访问速度快,对事务完整性没有要求,支持表级锁
  2. MyISAM Merge:将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。
  3. InnoDB:提供了具有提交、回滚和崩溃恢复能力的事务安全。支持事务、外键和行级锁。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。也是目前MySQL默认的存储引擎。
  4. Memory(heap):使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常快(没有IO读写),因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦MySQL服务关闭,表中的数据就会丢失掉,表的结构还在,对临时表有用。
  5. archive:这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。

# 查看所有存储引擎
SHOW ENGINES;
# 修改存储引擎
ALTER TABLE 表名 ENGINE=存储引擎;

-- innodb 存储引擎,是前面使用过. 
-- 1. 支持事务 2. 支持外键 3. 支持行级锁

-- myisam 存储引擎
-- 1. 添加速度快 2. 不支持外键和事务 3. 支持表级锁
CREATE TABLE t28 (
    id INT, 
    `name` VARCHAR(32)) ENGINE MYISAM;

-- memory 存储引擎
-- 1. 数据存储在内存中[关闭了 Mysql 服务,数据丢失, 但是表结构还在]
-- 2. 执行速度很快(没有 IO 读写) 3. 默认支持索引(hash 表)
CREATE TABLE t29 (
    id INT, 
    `name` VARCHAR(32)) ENGINE MEMORY;

存储引擎的选择:

  • 如果你的应用不需要事务,处理的只是基本的CRUD操作,那么MyISAM是不二选择,速度快。
  • 如果需要支持事务,选择InnoDB
  • Memory 存储引擎就是将数据存储在内存中,由于没有磁盘I/O的等待,速度极快。但由于是内存存储引擎,所做的任何修改在服务器重启后都将消失。(经典用法:用户的在线状态) 

10.2 视图

1. 需求:

表的列信息很多,有些是重要信息,如果我们希望某个用户只能査询部分列信息(不重要),有什么办法?=>视图。即让用户查的其实是包含部分列信息的视图,而不是原始的表。

2. 视图概念:

  • 视图是一个虚拟表,其内容由查询定义,有基表创建(基表可以有多个)。
  • 同真实的表一样,视图包含列,其数据来自对应的真实表(基表)。
  • 通过视图可以修改基表数据,修改基表数据也会改变视图。
  • 创建视图后,到数据库去看,对应视图只有一个视图结构文件(形式: 视图名.frm),而没有数据文件。
  • 视图中可以再使用视图,数据仍然来自于基表。

3. 视图的使用:

# 创建视图
create view 视图名 as select 语句
CREATE VIEW emp_view01
    AS
    SELECT empno, ename, job, deptno FROM emp;

# 更新成新的视图
alter view 视图名 as select 语句 

# 查看创建视图的指令
SHOW CREATE VIEW 视图名

# 删除视图
drop view 视图名1,视图名2;
# 对emp、dept、salgrade三张表.创建一个视图
# 显示雇员编号,雇员名,雇员部门名称和薪水级别
CREATE VIEW emp_view03
    AS
    SELECT empno, ename, dname, grade
        FROM emp, dept, salgrade
        WHERE emp.deptno = dept.deptno AND (sal BETWEEN losal AND hisal)

10.3 mysql用户管理

1. Mysql用户

mysql中的用户,都存储在系统数据库mysql中 user 表中。
不同的数据库用户,登录到DBMS,根据相应的权限,可以操作的数据库和数据对象不相同。
可以通过授权和回收使不同用户操作其他用户的数据库。
其中user表的重要字段说明:
host: 允许登录的“位置”,localhost表示该用户只允许本机登录,也可以指定ip地址,比如:192.168.1.100
user:用户名
authentication_string:密码,是通过mysql的password()函数加密之后的密码。
# 创建用户,同时指定密码
create user '用户名’@’允许登录位置’ identified by '密码';
-- 创建用户 shunping 密码 123 , 从本地登录
CREATE USER 'shunping'@'localhost' IDENTIFIED BY '123'

# 删除用户
drop user '用户名’@'允许登录位置';

# 用户修改密码
# 修改自己的密码:
set password = password('密码');
# 修改他人的密码(需要有修改用户密码权限)
set password for'用户名'@'登录位置’ = password('密码');
-- 修改 shunping 的密码为 abc
SET PASSWORD FOR 'shunping'@'localhost' = PASSWORD('abc');
在创建用户的时候,如果不指定@’允许登录位置’, 则为% , %表示所有 IP 都有连接权限
-- create user xxx;
CREATE USER jack
也可以这样指定IP段
-- create user 'xxx'@'192.168.1.%' 表示 xxx 用户在 192.168.1.*的 ip 可以登录 mysql
CREATE USER 'smith'@'192.168.1.%;
在删除用户的时候,如果 host 不是 %, 需要明确指定 '用户'@'host 值'
DROP USER jack -- 默认就是 DROP USER 'jack'@'%' 
DROP USER 'smith'@'192.168.1.%

 2. mysql中的权限管理:授权和回收

权限列表:

2.1 授权

# 给用户授权
grant 权限列表 on 库.对象名 to '用户名’@’登录位置';
grant 权限列表 on 库.对象名 to '用户名’@’登录位置' identified by '密码';

-- 给 shunping 分配查看 news 表和 添加 news 的权限
GRANT SELECT , INSERT
    ON testdb.news
    TO 'shunping'@'localhost'
  • 权限列表,多个权限用逗号分开
  • 库.对象名如果写成:
         (1) *.*:代表本系统中的所有数据库的所有对象(表,视图,存储过程)
        (2) 库.*:表示某个数据库中的所有数据对象(表,视图,存储过程等)
  • identified by可以省略,也可以写出:
        (1) 如果用户存在,授权的同时修改该用户的密码
        (2) 如果该用户不存在,创建该用户同时授权

2.2 回收用户授权

revoke 权限列表 on 库.对象名 from'用户名"@"登录位置';

2.3 权限生效指令

 如果权限没有生效执行:
FLUSH PRIVILEGES;

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

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

相关文章

使用MobaXterm/winTerm之类的工具连接虚拟机时报错Permission denied或者Access denied的解决办法

一、虚拟机设置: 1.将点击【编辑】---> 【虚拟网络编辑器】 2.添加VMnet6 1)点击【DHCP设置】--->添加网络--->选中【仅主机模式】【将主机虚拟适配器连接到此网络】 2)子网ip写“192.168.66.0” 3)点击右下角【应用…

前端实现打开新标签页后,再次定位到该标签页

需求 A 页面中点击按钮可以打开新的标签页 B 并且向 B 页面发送消息数据。 当新的标签页 B 未关闭且符合同源策略时&#xff0c;再次点击按钮&#xff0c;可以自动跳转到标签页 B 并且发生消息数据。 B.html <script>window.onmessage evt > {console.log(evt.d…

xss跨站脚本攻击笔记

1 XSS跨站脚本攻击 1.1 xss跨站脚本攻击介绍 跨站脚本攻击英文全称为(Cross site Script)缩写为CSS&#xff0c;但是为了和层叠样式表(CascadingStyle Sheet)CSS区分开来&#xff0c;所以在安全领域跨站脚本攻击叫做XSS 1.2 xss跨战脚本攻击分类 第一种类型:反射型XSS 反射…

14.java openCV4.x 入门-Core之图像融合

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

每日一题(leetcode2529):正整数和负整数的最大计数--二分法

因为需要O&#xff08;logn&#xff09;的复杂度&#xff0c;所以考虑使用二分法&#xff0c;先找到负数里面的最大下标&#xff08;初始值定为-1&#xff09;&#xff0c;再找到第一个正数的下标&#xff08;初始值定为数组长度值&#xff09;。最后求出个数并进行比较即可。 …

说说你对算法中时间复杂度,空间复杂度的理解?如何计算?

一、前言 算法&#xff08;Algorithm&#xff09;是指用来操作数据、解决程序问题的一组方法。对于同一个问题&#xff0c;使用不同的算法&#xff0c;也许最终得到的结果是一样的&#xff0c;但在过程中消耗的资源和时间却会有很大的区别 衡量不同算法之间的优劣主要是通过时…

深度学习图像处理04:图像分类模型训练实战——动物分类

这篇博文不涉及理论知识&#xff0c;主要通过一个完整的深度学习模型训练流程&#xff0c;直观地了解深度学习图像分类任务。有关理论的部分&#xff0c;之前几篇博文已经涉及基础部分&#xff0c;之后也会对一些理论进行补充。 本文将结合代码&#xff0c;主要介绍三部分内容…

嵌入式应会的模电数电基础

AC/DC交直流 电压 欧姆定律 常见元器件 电阻器 并联电阻&#xff0c;增加通路&#xff0c;电阻更小&#xff0c;电流更大 串联电阻&#xff0c;电阻更大&#xff0c;电流越小 相同阻值的电阻&#xff0c;个头大小不同主要区别在功率容量、耐压能力和散热性能方面。 功率容量…

产品开发流程

产品开发流程 时间&#xff1a;2024年04月10日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 产品开发流程_小蒋聊技术_免费在线阅读收听下载 - 喜马拉雅欢迎收听小蒋聊技术的类最新章节声音“产品开发流程”。时间&#xff1a;…

MQ死信队列:面试题

所谓的死信队列只不过是我们自己定义的一个队列&#xff0c;注意对于这个队列只能人工干预 面试题&#xff1a;你们是如何保证消息不会丢失的 1&#xff0c;什么是死信 在RabitMQ中充当主角的就是消息&#xff0c;在不同场景下&#xff0c;消息会有不同地表现。 死信就是在…

Hugo 配置个人博客

下载 Hugo 下载地址: https://www.gohugo.org/ 或者点击百度云链接下载安装包: 链接&#xff1a;https://pan.baidu.com/s/1s2GuNuUKDjEXRzXgCvEYHQ?pwd6666 提取码&#xff1a;6666 安装 Hugo 在文件夹内建立新的文件夹, 在再内部建立两个文件夹, 分别命名为 bin 和 site.…

设计模式——2_8 策略(Strategy)

文章目录 定义图纸一个例子&#xff1a;如何切换坦克的攻击方式GameElement&#xff08;游戏元素&#xff09;TankFactory&#xff08;坦克工厂&#xff09;Tank&#xff08;坦克&#xff09; 医疗车和飞行车策略模式Behavior(行为)TankTankFactory 碎碎念策略和状态为什么我们…

深入浅出 -- 系统架构之微服务中OpenFeign最佳实践

前面我们讲了一下 Ribbon 和 RestTemplate 实现服务端通信的方法&#xff0c;Ribbon 提供了客户端负载均衡&#xff0c;而 RestTemplate 则对 http 进行封装&#xff0c;简化了发送请求的流程&#xff0c;两者互相配合&#xff0c;构建了服务间的高可用通信。 但在使用后也会发…

打开Visual Studio后出现Visual Assist报错弹窗

安装了新的VA插件后发现无论如何清理打开VS都会报这个旧版VA报错弹窗&#xff0c;修复VS、重装VA都解决不了 后来进到VS安装目录&#xff0c;删掉一个可疑文件后弹窗再也不出现了

设计模式之迭代器模式(上)

迭代器模式 1&#xff09;概述 1.概念 存储多个成员对象&#xff08;元素&#xff09;的类叫聚合类(Aggregate Classes)&#xff0c;对应的对象称为聚合对象。 聚合对象有两个职责&#xff0c;一是存储数据&#xff0c;二是遍历数据。 2.概述 迭代器模式(Iterator Patter…

微信朋友圈定时神器必须拥有!随时随地轻松发圈!

在微信朋友圈这个社交平台上&#xff0c;很多人都希望通过发布内容来进行个人推广或商业营销。但是&#xff0c;在忙碌或是节假日时&#xff0c;想要随意发布内容也会有些麻烦。 今天我要向大家分享的是一个微信朋友圈定时发布的神器&#xff0c;让您随时随地轻松发圈&#xf…

ES11-12

1-ES11-Promise.allSettled Promise.allSettled0)方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise结果。 简单来说不管成功失败都会调用.then()&#xff0c;然后处理成功和失败的结果 const promises [ …

嵌入式学习第三十二天!(队列)

1. 队列的定义&#xff1a; 队列&#xff1a;是只允许一端进行数据插入&#xff0c;而另一端进行数据删除的线性表。&#xff08;先进先出FIFO&#xff09;&#xff0c;如下图所示。 队列的应用&#xff1a;缓冲区&#xff0c;即解决高速设备和低速设备数据交互的时候&#xff…

K8S容器空间不足问题分析和解决

如上图&#xff0c;今天测试环境的K8S平台出现了一个问题&#xff0c;其中的一个容器报错&#xff1a;Free disk space below threshold. Available: 3223552 bytes (threshold: 10485760B)&#xff0c;意思服务器硬盘空间不够了。这个问题怎么产生的&#xff0c;又怎么解决的呢…

“人工智能+数字人”,让数字技术赋能多领域智能化管理、数字化服务

AI数字人结合了语音合成、语音识别、语义理解、图像处理、虚拟形象驱动等多项AI核心技术&#xff0c;可以实现导览服务、信息播报、互动交流、业务咨询等智能化功能。 如今&#xff0c;AI数字人逐渐被政务、文旅、展馆展厅、博物馆、数字会议、金融、校园等等领域多元化应用&am…