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 JOINSELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;返回两个表格中满足连接条件的行,只包括那些在两个表格中都有匹配的行。
LEFT JOINSELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;返回左表格中所有的行,以及右表格中与左表格匹配的行。如果没有匹配的行,右表格中的列将显示NULL。
RIGHT JOINSELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;返回右表格中所有的行,以及左表格中与右表格匹配的行。如果没有匹配的行,左表格中的列将显示NULL。
FULL OUTER JOINSELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column = table2.column;返回所有行,包括左表格和右表格中的所有行。如果没有匹配的行,对应的列将显示NULL。
SELF JOINSELECT * 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 UNCOMMITTEDREAD UNCOMMITTED是最低的隔离级别。允许一个事务读取另一个正在执行的事务未提交的更改。可能会出现"脏读"、"不可重复读"和"幻读"等问题。- 需要极高的并发性,且对数据一致性要求不高的情况。
READ COMMITTEDREAD COMMITTED是MySQL的默认隔离级别。允许一个事务只读取已提交的其他事务的更改。解决了"脏读"问题,但仍可能出现"不可重复读"和"幻读"。- 适用于大多数应用程序,提供合理的并发性和数据一致性。
REPEATABLE READREPEATABLE READ提供了更高的隔离性。在事务内部,禁止其他事务插入新数据,但仍可读取已存在的数据。解决了"不可重复读"问题,但仍可能出现"幻读"。- 需要较高的数据一致性,对并发性要求适度的情况。
SERIALIZABLESERIALIZABLE是最高的隔离级别。在事务内部,禁止其他事务插入新数据和读取已存在的数据。提供了最高的隔离性,防止"不可重复读"和"幻读"等问题。- 需要最高级别的数据一致性和严格的隔离的情况。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盖丽男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值