MySQL数据引擎、建库及账号管理

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: MySQL是一个开源的关系型数据库管理系统,其名称源自于创始人的女儿名字"My"和"SQL"(结构化查询语言)的缩写。作为最流行的开源数据库之一,MySQL被广泛使用在各种应用和网站开发中。它具有,支持多种操作系统,并且提供了丰富的功能和灵活的配置选项。MySQL提供了强大的数据管理功能,包括创建、修改和删除数据库、数据表和索引,以及实现数据的操作。它支持多种数据类型,如整数、字符、日期和时间等,并提供了丰富的内置函数和操作符,方便进行数据处理和计算。


一、引言

MySQL是一个开源的关系型数据库管理系统,其名称源自于创始人Michael Widenius的女儿名字"My"和"SQL"(结构化查询语言)的缩写。作为最流行的开源数据库之一,MySQL被广泛使用在各种应用和网站开发中。它具有良好的性能、稳定性和可扩展性,支持多种操作系统,并且提供了丰富的功能和灵活的配置选项。

MySQL提供了强大的数据管理功能,包括创建、修改和删除数据库、数据表和索引,以及实现数据的增删改查操作。它支持多种数据类型,如整数、字符、日期和时间等,并提供了丰富的内置函数和操作符,方便进行数据处理和计算。

除了基本的数据管理功能,MySQL还提供了高级特性,如事务处理、存储过程、触发器和视图等。它支持多用户并发访问,可以通过用户权限管理实现对数据库的安全控制。

另外,MySQL提供了多种编程接口和驱动程序,使开发人员可以使用各种编程语言(如Python、Java、PHP等)与数据库进行交互。同时,MySQL还提供了可视化工具,如MySQL Workbench,以便于开发人员管理和操作数据库。

总的来说,MySQL是一个功能强大、易于使用且可靠稳定的数据库管理系统,它在各种应用场景下都得到了广泛应用,并且不断发展和更新,以满足不断变化的数据管理需求。

二、MySQL数据库引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎

MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。

MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 等,可分别根据各个引擎的功能和特性为不同的数据库处理任务提供各自不同的适应性和灵活性。  

MySQL数据库引擎是MySQL系统中负责数据存储和访问的核心组件。MySQL提供了多个不同的数据库引擎,每个引擎有其特定的特性和适用场景。

以下是MySQL中一些常见的数据库引擎:

    1. InnoDB引擎:InnoDB是MySQL的默认引擎,它提供了ACID(原子性、一致性、隔离性、持久性)事务支持,具备高并发性能和自动故障恢复能力。它支持行级锁定和外键约束等高级特性,适用于大型应用和高并发环境。
    2. MyISAM引擎:MyISAM是MySQL的另一个常用引擎,它提供了较快的读取速度和高效的全文索引功能。但是,MyISAM不支持事务和行级锁定,对于频繁的写入操作性能相对较差,适用于读取为主的应用场景。
    3. MEMORY引擎:MEMORY引擎将数据存储在内存中,提供了快速的读写速度,适用于对性能要求极高的应用。然而,由于数据存储在内存中,一旦数据库重启或崩溃,所有数据都会丢失。因此,MEMORY引擎适用于缓存数据、临时表和其他临时性数据存储。
    4. NDB Cluster引擎:NDB Cluster引擎是MySQL集群中的一种专用引擎,它提供了高可用性和高扩展性的数据存储解决方案。它能够将数据分布在多个节点上,并提供了实时数据复制和故障恢复功能。

    除了以上几种常见的引擎,MySQL还提供了其他一些引擎,如ARCHIVE引擎、CSV引擎等,每个引擎有其独特的特点和用途。在选择适合的数据库引擎时,需要根据具体的需求考虑数据的读写模式、数据一致性要求、并发访问情况等因素。

    1、InnoDB(MySQL默认引擎)

    InnoDB是事务型存储引擎,提供了对数据库ACID事务的支持,并实现了SQL标准的四种隔离级别,具有行级锁定(这一点说明锁的粒度小,在写数据时,不需要锁住整个表,因此适用于高并发情形)及外键支持(所有数据库引擎中独一份,仅有它支持外键)该引擎的设计目标便是处理大容量数据的数据库系统,MySQL在运行时InnoDB会在内存中建立缓冲池,用于缓存数据及索引。

    InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。InnoDB是默认的MySQL引擎

    SHOW ENGINES

    image.gif

    我们可以看到所有的引擎

    image.gif编辑

    InnoDB行锁定

    MyISAM表锁定):查询效率高

    2、事务

    ACID事务

      1. 原子性(Atomicity):事务是一个原子性质的操作单元,事务里面的对数据库的操作要么都执行,要么都不执行
      2. 一致性(Consistency):在事务开始之前和完成之后,数据都必须保持一致状态必须保证数据库的完整性。也就是说,数据必须符合数据库的规则。
      3. 隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰
      4. 持久性(Durability):持久性也成为永久性指一个事务一旦提交,它对数据库中数据的改变就应该是永久的

      四种隔离级别

        1. 读未提交(Read Uncommitted):在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)
        2. 读已提交(Read Committed):这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(NonrepeatableRead),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果
        3. 可重复读(Repeatable Read):这是MySQL的默认事务隔离级别,同一事务的多个实例在并发读取数据时,会看到同样的数据。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。
        4. 可串行化(Serializable):这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争  

        何为脏读,幻读,不可重复读?

        幻读再查询的那一刻查询的是多少,但是其实并不是那么多;有可能在查询的这一刻又更改了数据。

        脏读

        脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

        image.gif编辑

        T2时刻,事务B把原来张三的成绩由原数据80改为了70,此后又被T3时刻的事务A读取到了,但是T4时刻事务B发生异常,进行了回滚操作。这个过程,我们称70为脏数据,事务A进行了一次脏读。

        不可重复读

        不可重复读,有时候也会说成“读已提交”。什么意思呢,就是在一个事务内,多次读取同一个数据,却返回了不同的结果。实际上,这是因为在该事务间隔读取数据的期间,有其他事务对这段数据进行了修改,并且已经提交,就会发生不可重复读事故。

        image.gif编辑

        图示中事务A在T1和T4查询同一语句,却得到了不同的结果,这是因为T2~T3时刻事务B对该数据进行了修改,并提交。这个过程,出现了在一个事务内两次读到的数据却是不一样的,我们称为是不可重复读

        不可重复读脏读的区别:前者是“读已提交”,后者是“读未提交”

        幻读

        幻读是指当事务不独立执行时,插入或者删除另一个事务当前影响的数据而发生的一种类似幻觉的现象。举个例子,某事务在检查表中的数据数count时,是10,过一段时间之后再查是11,这就发生了幻读,之前的检测获取到的数据如同幻觉一样。

        出现幻读和不可重复读的原因很像,都是在多次操作数据的时候发现结果和原来的不一样了,出现了其他事务干扰的现象。但是,幻读的偏重点是添加和删除数据,多次操作数据得到的记录数不一样;不可重复读的偏重点是修改数据,多次读取数据发现数据的值不一样了。

        image.gif编辑

        事务B向表中新插入了一条数据,事务A在T3时刻后查询数据的时候,突然发现数据和以前查询的时候多出了一项,像产生了幻觉一样。

        三、数据库授权

        授权是通过GRANT语句来实现的,它允许管理员分配给用户特定的权限,以便他们能够执行特定的数据库操作

        1、查看用户

        我们必须在mysql里面进行一个查询,也就是切换数据库

        use mysql;
        SELECT * from user;
        image.gif

        image.gif编辑

        2、创建用户、用户设置密码

        我们首先查看一下我们的数据库的版本,我用的是8.0.18版本,MySQL 5.7 版本是不一样的。 MySQL 5.7 版本不再使用 Password 来作为密码的字段,而改成了 authentication_string。

        查看版本
        SELECT VERSION()
        image.gif

        image.gif编辑

        创建用户
        create user test01;
        设置密码
        ALTER USER 'test01'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

        image.gif

        创建成功我们测试连接

        image.gif编辑

        3、设置用户授权

        语法grant privileges on databasename.tablename to username@'host';

        给 test01用户 赋予 数据库mybatis_ssm中的表t_p1_user 查询权限

              grant SELECT onmybatis_ssm.t_p1_usertotest01@'%';

        给 test01用户 赋予 数据库db_xiaoli中的表t_p1_user 修改权限

               grant UPDATE onmybatis_ssm.t_p1_usertotest01@'%';

        给 test01用户 赋予 数据库mybatis_ssm中所有表 查询权限

               grant SELECT onmybatis_ssm.*totest01@'%';

        给 test01用户 赋予 数据库mybatis_ssm中所有表 所有权限

               grant ALL onmybatis_ssm.*totest01@'%';

        我们运行后刷新一下test01可以看到我们的mybatis_ssm已经赋予过去了

        image.gif编辑

        4、收回部分权限 (Revoke)

        语法:revoke privileges on databasename.tablename from username@'host';

        啥也不能回收,不会对GRANT ALL PRIVILEGES ON mybatis_ssm.* TO test01@%有任何影响

        revoke DELETE on mybatis_ssm.t_p1_user from test01@'%';
        image.gif

        可以回收GRANT SELECT, UPDATE ON mybatis_ssm.t_p1_user TO test01@%这条权限语句

        revoke all on mybatis_ssm.t_p1_user from test01@'%';
        image.gif

        可以回收GRANT ALL PRIVILEGES ON mybatis_ssm.* TOtest01@%这条赋权语句带来的权限

        revoke all on mybatis_ssm.* from test01@'%';
        image.gif

        我们运行后刷新一下test01可以看到我们的mybatis_ssm已经被回收了

        image.gif编辑

        5、删除用户

        我们运行后重新连接就会出现以下的问题

        DROP User test01

        image.gif

        image.gif编辑

        image.gif编辑


        相关实践学习
        如何在云端创建MySQL数据库
        开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
        全面了解阿里云能为你做什么
        阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
        相关文章
        |
        2月前
        |
        安全 关系型数据库 MySQL
        如何将数据从MySQL同步到其他系统
        【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
        259 0
        |
        9天前
        |
        存储 关系型数据库 MySQL
        mysql怎么查询longblob类型数据的大小
        通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
        38 6
        |
        1月前
        |
        存储 Oracle 关系型数据库
        【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
        本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
        142 11
        【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
        |
        18天前
        |
        存储 关系型数据库 MySQL
        MySQL引擎InnoDB和MyISAM的区别?
        InnoDB是MySQL默认的事务型存储引擎,支持事务、行级锁、MVCC、在线热备份等特性,主索引为聚簇索引,适用于高并发、高可靠性的场景。MyISAM设计简单,支持压缩表、空间索引,但不支持事务和行级锁,适合读多写少、不要求事务的场景。
        50 9
        |
        20天前
        |
        SQL 关系型数据库 MySQL
        mysql分页读取数据重复问题
        在服务端开发中,与MySQL数据库进行数据交互时,常因数据量大、网络延迟等因素需分页读取数据。文章介绍了使用`limit`和`offset`参数实现分页的方法,并针对分页过程中可能出现的数据重复问题进行了详细分析,提出了利用时间戳或确保排序规则绝对性等解决方案。
        |
        26天前
        |
        关系型数据库 MySQL 数据库
        GBase 数据库如何像MYSQL一样存放多行数据
        GBase 数据库如何像MYSQL一样存放多行数据
        |
        1月前
        |
        缓存 NoSQL 关系型数据库
        Redis和Mysql如何保证数据⼀致?
        在项目中,为了解决Redis与Mysql的数据一致性问题,我们采用了多种策略:对于低一致性要求的数据,不做特别处理;时效性数据通过设置缓存过期时间来减少不一致风险;高一致性但时效性要求不高的数据,利用MQ异步同步确保最终一致性;而对一致性和时效性都有高要求的数据,则采用分布式事务(如Seata TCC模式)来保障。
        64 14
        |
        1月前
        |
        SQL 前端开发 关系型数据库
        SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
        SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
        60 9
        |
        1月前
        |
        关系型数据库 MySQL
        mysql 5.7.x版本查看某张表、库的大小 思路方案说明
        mysql 5.7.x版本查看某张表、库的大小 思路方案说明
        69 5
        |
        1月前
        |
        SQL DataWorks 关系型数据库
        阿里云 DataWorks 正式支持 SelectDB & Apache Doris 数据源,实现 MySQL 整库实时同步
        阿里云数据库 SelectDB 版是阿里云与飞轮科技联合基于 Apache Doris 内核打造的现代化数据仓库,支持大规模实时数据上的极速查询分析。通过实时、统一、弹性、开放的核心能力,能够为企业提供高性价比、简单易用、安全稳定、低成本的实时大数据分析支持。SelectDB 具备世界领先的实时分析能力,能够实现秒级的数据实时导入与同步,在宽表、复杂多表关联、高并发点查等不同场景下,提供超越一众国际知名的同类产品的优秀性能,多次登顶 ClickBench 全球数据库分析性能排行榜。