mysql入门,各种概念了解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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是最高的隔离级别。 在事务内部,禁止其他事务插入新数据和读取已存在的数据。 提供了最高的隔离性,防止"不可重复读"和"幻读"等问题。 - 需要最高级别的数据一致性和严格的隔离的情况。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
2月前
|
关系型数据库 MySQL 数据库
MySQL基本操作入门指南
MySQL基本操作入门指南
78 0
|
1月前
|
缓存 算法 关系型数据库
Mysql(3)—数据库相关概念及工作原理
数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
48 5
Mysql(3)—数据库相关概念及工作原理
|
1月前
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
109 5
|
2月前
|
存储 关系型数据库 MySQL
MySQL索引的概念与好处
本文介绍了MySQL存储引擎及其索引类型,重点对比了MyISAM与InnoDB引擎的不同之处。文中详细解释了InnoDB引擎的自适应Hash索引及聚簇索引的特点,并阐述了索引的重要性及使用原因,包括提升数据检索速度、实现数据唯一性等。最后,文章还讨论了主键索引的选择与页分裂问题,并提供了使用自增字段作为主键的建议。
MySQL索引的概念与好处
|
2月前
|
SQL 关系型数据库 MySQL
MySQL入门到精通
MySQL入门到精通
|
5月前
|
存储 关系型数据库 MySQL
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
MySQL Change Buffer 深入解析:概念、原理及使用
|
4月前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
60 0
「Python入门」python操作MySQL和SqlServer
|
4月前
|
SQL 关系型数据库 MySQL
【MySQL从入门到精通】常用SQL语句分享
【MySQL从入门到精通】常用SQL语句分享
57 2
|
5月前
|
关系型数据库 MySQL 数据库
『Django』模型入门教程-操作MySQL
一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,Django 的 ORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。 本文介绍模型的用法。