• 【MySQL】MySQL入门基础



    一、数据库基础

    1. 什么是数据库

    数据库 是一个有组织的集合,用于存储和管理数据的系统。它是一个软件系统,被设计用来存储、检索和管理数据,并提供数据的快速访问和处理。数据库可以被看作是一种特殊的文件系统,但与传统的文件系统不同的是:它能够更加高效的存储和管理大量结构化数据。

    数据库主要由数据库管理系统(DBMS)数据库组成:

    • 数据库管理系统(DBMS):
      • 数据库管理系统是数据库的核心组成部分。它是一种软件系统,用于管理数据库的创建、维护、访问和操作。DBMS提供了一组功能,允许用户定义数据结构、存储数据、检索数据、更新数据、维护数据完整性、实施安全性控制、备份和恢复数据等。常见的DBMS包括MySQL、Oracle、SQL Server、PostgreSQL、SQLite等。不同的DBMS可能支持不同的数据模型,如关系型、文档型、图形型等,以满足不同类型的应用需求。
    • 数据库:
      • 数据库是一个有组织的数据集合,其中包含一个或多个数据表,每个数据表存储特定类型的数据。数据库用于持久性地存储和管理数据。数据可以以结构化的方式存储,允许用户定义数据表的结构、字段和数据类型。数据库中的数据可以根据需要进行增加、修改、删除和查询。数据库可以用于存储各种类型的数据,包括文本、数字、图像、音频、视频等。

    2. 数据库和文件

    存储数据用文件就可以了,为什么还要弄个数据库?

    文件保存数据 有以下几个缺点:

    • 文件的安全性问题
    • 文件不利于数据查询和管理
    • 文件不利于存储海量数据
    • 文件在程序中控制不方便

    数据库相比于传统的文件存储系统具有重要的优点如下:

    1. 数据结构化和一致性: 数据库强制数据以一种结构化的方式存储,这有助于确保数据的一致性和准确性。文件存储系统通常不提供此类数据结构化支持。
    2. 数据完整性: 数据库管理系统(DBMS)提供了强大的数据完整性约束,以确保数据的有效性。这包括主键、外键、唯一性约束等。
    3. 数据共享: 多个用户或应用程序可以同时访问数据库,而不会破坏数据的完整性。数据库提供了并发控制机制来管理同时访问数据的多个用户。
    4. 数据安全性: 数据库可以提供用户身份验证和访问控制,以保护敏感数据免受未经授权的访问。文件存储通常没有这种级别的安全性。
    5. 高性能和优化查询: 数据库系统经过优化,能够高效地处理数据检索和复杂查询。文件系统通常没有这种查询优化功能。
    6. 数据冗余减少: 数据库减少了数据冗余,因为相同数据只存储一次,而且可以通过外键建立关系,从而减少了数据存储和更新的复杂性。
    7. 数据一致性维护: 数据库提供了事务处理,允许多个操作被作为一个单一的、原子性的工作单元来执行。这有助于保持数据的一致性,即使在系统出现故障的情况下。
    8. 备份和恢复: 数据库提供了备份和恢复功能,以保护数据免受丢失或损坏。文件存储通常需要手动管理备份。
    9. 数据可扩展性: 数据库系统可以根据需求进行扩展,以处理大规模数据,而不会导致性能下降。
    10. 数据查询和分析: 数据库允许执行复杂的查询和分析操作,以从数据中提取有用的信息。这是文件存储系统所不具备的功能。

    3. 主流数据库(关系型数据库)

    • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
    • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
    • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
    • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
    • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
    • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中

    mysql 是一套给我们提供数据存取的服务的网络程序

    数据库一般指的是,在磁盘或者内存中存储的特点结构组织的数据——将来在磁盘上存储的一整套数据库方案。

    数据库服务——mysqld

    在这里插入图片描述

    一般文件确实提供了数据的存储功能,但是文件没有提供非常好的数据管理能力(用户角度)

    数据库的本质: 对数据内容存储的一套解决方案,用户将字段或者要求交给mysql,mysql再将要求交给mysqld服务端,最后mysqld再将结果返回给mysql,然后由mysql返回给用户。


    二、MySQL的基本使用

    1. 连接服务器

    mysql -h 127.0.0.1 -P 3306 -u root -p
    
    • 1

    在这里插入图片描述

    注意:

    1. 如果没有写 -h 127.0.0.1 默认是连接本地
    2. 如果没有写 -P 3306 默认是连接3306端口号

    2. 服务器管理

    1. 执行 win+r 输入 services.msc 打开服务管理器
    2. 通过下图左侧停止,暂停,重启动按钮进行服务管理
      在这里插入图片描述

    3. 服务器、数据库、表关系

    • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
    • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
    • 数据库服务器、数据库和表的关系如下:
      在这里插入图片描述

    4. 使用案例

    在这里插入图片描述

    💕 创建数据库:

    create database helloworld;
    
    • 1

    在这里插入图片描述
    其中,helloworld是要创建的新数据库的名称,执行该语句后,MySQL服务器将在其文件系统上创建一个新的数据库目录,并在其中存储有关该数据库的元数据信息。然后,可以使用该数据库执行其他 SQL 操作,如创建表格、插入数据等。在创建数据库时,还可以通过可选的参数来指定其他属性,例如字符集、校对规则等。

    💕 使用数据库:

    use helloworld;
    
    • 1

    helloworld是指要使用的数据库的名称,在MySQL服务器中,可以同时存在多个数据库,使用use语句可以让用户指定当前要使用哪个数据库,从而执行该数据库中的SQL操作。在使用use语句之前,必须先创建要使用的数据库。

    💕 显示当前使用的数据库:

    select database();
    
    • 1

    database()是一个SQL函数,用于返回当前使用的数据库的名称。

    在这里插入图片描述

    💕 创建数据库表

    create table 语句用于在关系型数据库中创建新的数据表。数据表是用于存储和组织数据的一种结构化对象,其由列和行组成。

    以下是一个简单的 create table 语句的例子,创建一个名为 students 的数据表,该表包 含 id、name 和 age 三个列:

    在这里插入图片描述

    💕 显示数据库中所有表:

    show tables
    
    • 1

    在这里插入图片描述

    这里我们需要注意的是:这里的 “Tables_in_数据库名” 中的数据库名表示的是当前使用的数据库名称。

    💕 向表中插入数据:

    insert into student (id, name, gender) values (1, '张三', '男');
    insert into student (id, name, gender) values (2, '李四', '女');
    insert into student (id, name, gender) values (3, '王五', '男');
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    插入的值必须与数据表中列的数据类型匹配,否则会出现错误,同时,如果插入的值中包含单引号等特殊字符,需要进行转义处理。

    💕 查询数据表:

    select * from table_name;
    
    • 1

    在这里插入图片描述

    💕 获取数据表的结构信息:

    desc table_name;
    
    • 1

    在这里插入图片描述

    执行该语句后,将返回一个结果集,其中包含数据表的结构信息。结果集中包含以下列:Field、Type、Null、Key、Default、Extra。\n\nField:数据表中列的名称。

    • Type:数据表中列的数据类型。
    • Null:列是否允许为空。
    • Key:列是否为主键或索引。
    • Default:列的默认值。
    • Extra:包含有关列的其他信息。

    三、数据的逻辑存储和实际存储

    逻辑存储

    数据库的数据逻辑存储是指在数据库中,如何将数据逻辑地组织和存储的问题。它是数据库设计的一个重要方面,对数据库的性能、可靠性和可扩展性等方面都有重要影响。

    数据逻辑存储主要是通过表、视图、索引等方式实现的。具体来说,每个数据库包含多个数据表,每个数据表包含多个数据行和数据列,每个数据列定义了数据类型和其他属性。数据表之间可以通过关联关系进行连接,形成视图。而索引则是一种数据结构,用于快速定位和访问数据表中的数据。

    实际存储

    数据库的数据实际存储结构包括数据页和数据行。

    数据页是数据库管理系统存储数据的最小单位,通常是固定大小的二进制文件。每个数据页通常包含多个数据行和一些元数据信息。数据库会将数据表中的数据按照数据页的大小进行分割和存储,以提高数据的访问效率。\n\n数据行是数据表中的一条记录,也是数据库中存储数据的基本单位。每个数据行包含若干个列,每个列对应一个数据类型的值。数据行可以看作是数据库中的一个对象,它具有唯一的标识符和属性。

    数据库的数据实际存储结构通常是由数据库管理系统自动维护的,用户只需要使用 SQL 语句进行操作即可。不过,在进行数据库设计时,需要考虑数据的存储方式和结构,以便提高数据库的性能和可维护性。


    四、MySQL的架构

    MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

    在这里插入图片描述

    • 客户端
      客户端是 MySQL 的用户界面,它允许用户与 MySQL 服务器进行交互。MySQL 客户端可以是命令行工具,如 mysql 或 mysqladmin,也可以是可视化工具,如MySQL Workbench。
    • 服务端
      MySQL 的服务端包括连接管理器、查询分析器、查询缓存、解析器、优化器、执行器等组件。当客户端连接到 MySQL 服务器时,连接管理器接收并处理连接请求。一旦连接建立,查询分析器将解析和分析查询语句,优化器将生成执行计划,执行器将执行查询并返回结果。
    • 存储引擎
      存储引擎是 MySQL 的底层数据存储和检索系统。MySQL 支持多种存储引擎,包括 MyISAM、InnoDB、MEMORY 等。每种存储引擎都有其独特的特点和适用场景。例如,MyISAM 适用于静态数据,InnoDB 适用于高并发性能。

    MySQL 服务器的连接管理器负责管理客户端与服务器的连接。当客户端请求连接时,连接管理器会分配一个新的线程来处理该连接。连接管理器会监控连接的活动,当连接空闲时,会关闭它们,以释放服务器资源。

    存储引擎层的主要作用包括:

    • 数据的物理存储:存储引擎负责将数据存储在磁盘上,包括表的数据、索引等。
    • 数据的检索和处理:存储引擎负责将查询语句转换成对数据的检索操作,并对结果进行处理和排序等操作。
    • 事务处理:存储引擎负责实现 MySQL 的事务特性,包括事务的开始、提交和回滚等操作。
    • 并发控制:存储引擎负责实现并发控制机制,以保证多个用户同时访问数据库时的数据一致性和完整性。

    总的来说,MySQL 的架构采用了客户端 / 服务端模式,服务端包括多个组件,存储引擎提供底层数据存储和检索服务。这种架构的优点是可以提高 MySQL 的性能和可扩展性,同时使其更加灵活和可定制。


    五、SQL分类

    • DDL【data definition language】 数据定义语言,用来维护存储数据的结构,代表指令: create, drop, alter
    • DML【data manipulation language】 数据操纵语言,用来对数据进行操作,代表指令: insert,delete,update
    • DML中又单独分了一个DQL,数据查询语言,代表指令: select
    • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务,代表指令: grant,revoke,commit

    六、存储引擎

    存储引擎 是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL的核心就是插件式存储引擎,支持多种存储引擎。

    InnoDB 和 MyISAM 的对比

    1. 事务支持:InnoDB 是支持事务的,而 MyISAM 不支持事务。
    2. 锁机制:InnoDB 采用行级锁,而 MyISAM 采用表级锁。

    💕 查看存储引擎

    show engines;
    
    • 1

    在这里插入图片描述

    💕 存储引擎对比

    在这里插入图片描述


  • 相关阅读:
    1、认识时间复杂度和简单的排序算法
    webpack 面试题
    python链接数据库并创建/删除/插入多个数据库/表/表数据
    Join and meet
    力扣.面试题 04.06. 后继者(java 树的中序遍历)
    c++ 条件变量使用详解 wait_for wait_unitl 虚假唤醒
    051校园短期闲置资源置换平台
    在智慧农业领域需要研究什么
    nginx安装搭建
    kafka事务的详解
  • 原文地址:https://blog.csdn.net/m0_67595314/article/details/134231701