mysql入门,各种概念了解

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: mysql入门,各种概念了解


原理

MySQL 是一个关系型数据库管理系统,展现形式上使用表格存储数据,底层的数据存储方式主要涉及到存储引擎(Storage Engine)的实现。MySQL支持多种存储引擎,每个存储引擎都有自己的数据存储方式和特点

存储引擎

以下是一些常见的MySQL存储引擎以及它们的数据存储方式:

  1. InnoDB
  • InnoDB是MySQL的默认存储引擎,它支持事务处理和外键约束。
  • 数据存储方式:InnoDB使用聚簇索引(Clustered Index)的方式存储数据,这意味着数据行的物理存储顺序与主键的逻辑顺序相匹配。每个InnoDB表格都有一个聚簇索引,通常是主键索引。
  1. MyISAM
  • MyISAM是另一种常见的存储引擎,它在一些旧版本的MySQL中常被使用。
  • 数据存储方式:MyISAM使用表格级锁定(Table-Level Locking)和非聚簇索引的方式存储数据,数据行的物理存储顺序与插入顺序无关。
  1. MEMORY
  • MEMORY存储引擎将表格数据存储在内存中,适用于需要快速访问和临时数据存储的情况。
  • 数据存储方式:数据存储在内存中,读取和写入速度非常快,但在数据库关闭时数据会丢失。
  1. Archive
  • Archive存储引擎用于存储大量的归档数据,通常用于数据归档和备份。
  • 数据存储方式:Archive存储引擎使用压缩和行存储的方式,以最小化磁盘空间的使用。
  1. NDB Cluster
  • NDB Cluster是一个集群存储引擎,用于构建高可用性和高可扩展性的MySQL集群。
  • 数据存储方式:NDB Cluster将数据分布在多个节点上,并使用内存存储和分布式存储技术来提供高性能和容错性。

这些存储引擎提供了不同的数据存储方式和特性,可以根据应用程序的需求选择合适的存储引擎。不同的存储引擎适用于不同的使用案例,例如InnoDB适合事务处理,MyISAM适合读密集型应用,MEMORY适合快速存取等。MySQL的存储引擎灵活性使得它能够适应各种不同的数据库需求。

基础语法

包括DML(数据操作语言)和DDL(数据定义语言)的语法:

类别 SQL语法 描述
DML语句 SELECTcolumn1, column2…FROMtableWHEREcondition; 从表格中检索数据,可以使用条件筛选出特定的行。
INSERT INTOtable (column1, column2…) VALUES (value1, value2…); 向表格中插入新的行,指定要插入的列和相应的值。
UPDATEtableSETcolumn1 = value1, column2 = value2…WHEREcondition; 更新表格中符合条件的行的数据。
DELETE FROMtableWHEREcondition; 从表格中删除符合条件的行。
DDL语句 CREATE TABLEtable (column1 datatype, column2 datatype…); 创建新的表格,指定列名和数据类型。
ALTER TABLEtableADD COLUMNcolumn datatype; 向已有表格中添加新的列。
ALTER TABLEtableMODIFY COLUMNcolumn datatype; 修改表格中已有列的数据类型。
ALTER TABLEtableDROP COLUMNcolumn; 从表格中删除指定的列。
DROP TABLEtable; 删除整个表格以及表格中的所有数据。
TRUNCATE TABLEtable; 删除表格中的所有数据,但保留表格结构。

这些是MySQL中最基本的SQL语法,用于查询、插入、更新、删除数据以及定义和修改表格结构。学会合理使用这些语法,可以进行广泛的数据库操作。请注意,在实际应用中,需要根据具体的业务需求和数据模型使用不同的SQL语句。

连表查询

各种连表查询的语句和效果:

连接类型 SQL语句 效果和描述
INNER JOIN SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column; 返回两个表格中满足连接条件的行,只包括那些在两个表格中都有匹配的行。
LEFT JOIN SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column; 返回左表格中所有的行,以及右表格中与左表格匹配的行。如果没有匹配的行,右表格中的列将显示NULL。
RIGHT JOIN SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column; 返回右表格中所有的行,以及左表格中与右表格匹配的行。如果没有匹配的行,左表格中的列将显示NULL。
FULL OUTER JOIN SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column = table2.column; 返回所有行,包括左表格和右表格中的所有行。如果没有匹配的行,对应的列将显示NULL。
SELF JOIN SELECT * FROM table AS t1 INNER JOIN table AS t2 ON t1.column = t2.column; 自连接是在同一表格中连接不同行的查询,用于处理具有层次结构的数据或依赖于相同表格的数据。

这些不同类型的连接允许你在多个表格之间建立关联,以获取更复杂的查询结果。INNER JOIN返回匹配的行,LEFT JOIN返回左表格的所有行以及与右表格匹配的行,RIGHT JOIN返回右表格的所有行以及与左表格匹配的行,FULL OUTER JOIN返回所有行,而自连接允许你在同一表格中建立关联。

索引

当涉及到MySQL的索引优化时,了解如何设计和使用索引以提高查询性能是非常重要的。MySQL支持多种索引类型,每种类型适用于不同的情况。下面是关于MySQL索引优化的相关内容:

索引类型 描述 何时使用
B/B+树索引 最常用的索引类型,适用于等值查询和范围查询。 - 当需要在列上执行等值查询(例如WHERE column = value)时。
- 当需要在列上执行范围查询(例如WHERE column > value)。
哈希索引 适用于等值查询,但不适用于范围查询或排序操作。 - 当需要在列上执行非常快速的等值查询(例如WHERE column = value)时。
全文索引 用于全文搜索,适用于文本数据的模糊匹配。 - 当需要在文本列上执行全文搜索时,例如使用MATCH AGAINST语句进行全文搜索。
空间索引 用于地理数据类型,支持地理坐标的范围和距离查询。 - 当需要在地理数据类型列上执行地理坐标范围查询或距离查询时,例如地图应用程序中的位置搜索。
组合索引 多个列的联合索引,适用于多个列的查询条件。 - 当查询中涉及多个列的条件时,可以考虑创建组合索引以加速这些查询。
唯一索引 确保列中的值是唯一的,通常用于主键或唯一约束。 - 当需要确保列中的值不重复时,可以创建唯一索引。
聚簇索引 特殊类型的索引,决定了数据在磁盘上的物理存储顺序。 - 聚簇索引通常用于主键列,可以加速主键查询。

需要注意的是,索引不是越多越好,不必为每个列都创建索引。过多的索引会增加写操作的开销,并且可能导致索引失效的情况。因此,在设计索引时,要根据具体的查询需求和数据模式选择合适的索引类型和列。定期监控索引的性能,根据实际情况进行调整,以确保数据库的高性能运行。

事务

解释:事务是数据库操作的一个逻辑单元,它要么完全执行,要么完全回滚,具有原子性。它的四个特性:

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

会用到的命令:

命令 解释 用法示例
START TRANSACTION 启动一个新的事务。 START TRANSACTION;BEGIN; 可以用来启动一个新事务。
COMMIT 提交事务并将更改永久保存到数据库。 COMMIT; 用于提交当前事务,将所有更改永久保存到数据库中。
ROLLBACK 回滚事务并撤销在事务中的更改。 ROLLBACK; 用于回滚当前事务,撤销在事务中的所有更改,将数据库恢复到事务开始前的状态。
SAVEPOINT 创建一个保存点,用于部分回滚事务。 SAVEPOINT savepoint_name; 用于创建一个保存点,之后可以使用 ROLLBACK TO savepoint_name; 部分回滚事务。
RELEASE SAVEPOINT 删除一个保存点。 RELEASE SAVEPOINT savepoint_name; 用于删除一个保存点,释放相关资源。
ROLLBACK TO 部分回滚事务到指定的保存点。 ROLLBACK TO savepoint_name; 用于将事务回滚到指定的保存点,撤销该保存点之后的更改。
SET TRANSACTION 设置事务的特性,如隔离级别。 SET TRANSACTION ISOLATION LEVEL isolation_level; 用于设置事务的隔离级别,可选的隔离级别包括 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE。

这些命令用于启动、提交、回滚事务以及管理事务中的保存点。通过使用这些命令,可以确保事务具有ACID属性(原子性、一致性、隔离性、持久性),并根据需要部分回滚或设置事务的隔离级别。这些命令对于数据库开发和管理中的事务控制非常重要。

隔离级别

隔离级别定义了多个事务之间的可见性和并发性,不同的隔离级别会影响事务之间是否能看得到增删改查。

隔离级别 介绍 定义 解释 解决的问题
READ UNCOMMITTED READ UNCOMMITTED是最低的隔离级别。 允许一个事务读取另一个正在执行的事务未提交的更改。 可能会出现"脏读"、"不可重复读"和"幻读"等问题。 - 需要极高的并发性,且对数据一致性要求不高的情况。
READ COMMITTED READ COMMITTED是MySQL的默认隔离级别。 允许一个事务只读取已提交的其他事务的更改。 解决了"脏读"问题,但仍可能出现"不可重复读"和"幻读"。 - 适用于大多数应用程序,提供合理的并发性和数据一致性。
REPEATABLE READ REPEATABLE READ提供了更高的隔离性。 在事务内部,禁止其他事务插入新数据,但仍可读取已存在的数据。 解决了"不可重复读"问题,但仍可能出现"幻读"。 - 需要较高的数据一致性,对并发性要求适度的情况。
SERIALIZABLE SERIALIZABLE是最高的隔离级别。 在事务内部,禁止其他事务插入新数据和读取已存在的数据。 提供了最高的隔离性,防止"不可重复读"和"幻读"等问题。 - 需要最高级别的数据一致性和严格的隔离的情况。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
24天前
|
存储 监控 关系型数据库
轻松入门Mysql:MySQL性能优化与监控,解锁进销存系统的潜力(23)
轻松入门Mysql:MySQL性能优化与监控,解锁进销存系统的潜力(23)
|
24天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
105 0
|
24天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
24天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:揭秘MySQL游标,数据处理的神秘利器(16)
轻松入门MySQL:揭秘MySQL游标,数据处理的神秘利器(16)
|
24天前
|
存储 SQL 关系型数据库
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
|
24天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
|
24天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
|
24天前
|
关系型数据库 MySQL 数据库
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
|
24天前
|
SQL 存储 关系型数据库
轻松入门MySQL:玩转数据表的增、删、改、查(4)
轻松入门MySQL:玩转数据表的增、删、改、查(4)
|
20天前
|
存储 关系型数据库 MySQL
MySQL基础入门:数据库操作全攻略
MySQL基础入门:数据库操作全攻略
48 0