mysql入门,各种概念了解

目录

    • 原理
    • 存储引擎
    • 基础语法
    • 连表查询
    • 索引
    • 事务
    • 隔离级别

原理

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

存储引擎

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

  1. InnoDB

    • InnoDB是MySQL的默认存储引擎,它支持事务处理和外键约束。
    • 数据存储方式:InnoDB使用聚簇索引(Clustered Index)的方式存储数据,这意味着数据行的物理存储顺序与主键的逻辑顺序相匹配。每个InnoDB表格都有一个聚簇索引,通常是主键索引。
  2. MyISAM

    • MyISAM是另一种常见的存储引擎,它在一些旧版本的MySQL中常被使用。
    • 数据存储方式:MyISAM使用表格级锁定(Table-Level Locking)和非聚簇索引的方式存储数据,数据行的物理存储顺序与插入顺序无关。
  3. MEMORY

    • MEMORY存储引擎将表格数据存储在内存中,适用于需要快速访问和临时数据存储的情况。
    • 数据存储方式:数据存储在内存中,读取和写入速度非常快,但在数据库关闭时数据会丢失。
  4. Archive

    • Archive存储引擎用于存储大量的归档数据,通常用于数据归档和备份。
    • 数据存储方式:Archive存储引擎使用压缩和行存储的方式,以最小化磁盘空间的使用。
  5. NDB Cluster

    • NDB Cluster是一个集群存储引擎,用于构建高可用性和高可扩展性的MySQL集群。
    • 数据存储方式:NDB Cluster将数据分布在多个节点上,并使用内存存储和分布式存储技术来提供高性能和容错性。

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

基础语法

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

类别 SQL语法 描述
DML语句 SELECT column1, column2… FROM table WHERE condition; 从表格中检索数据,可以使用条件筛选出特定的行。
INSERT INTO table (column1, column2…) VALUES (value1, value2…); 向表格中插入新的行,指定要插入的列和相应的值。
UPDATE table SET column1 = value1, column2 = value2… WHERE condition; 更新表格中符合条件的行的数据。
DELETE FROM table WHERE condition; 从表格中删除符合条件的行。
DDL语句 CREATE TABLE table (column1 datatype, column2 datatype…); 创建新的表格,指定列名和数据类型。
ALTER TABLE table ADD COLUMN column datatype; 向已有表格中添加新的列。
ALTER TABLE table MODIFY COLUMN column datatype; 修改表格中已有列的数据类型。
ALTER TABLE table DROP COLUMN column; 从表格中删除指定的列。
DROP TABLE table; 删除整个表格以及表格中的所有数据。
TRUNCATE TABLE table; 删除表格中的所有数据,但保留表格结构。

这些是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,数据库)