Mysql数据库:快速入门

目录

一. 介绍

1. 数据库基础概念

2 MySQL简介

二. 安装与配置

1. 下载与安装 MySQL

2. 配置 MySQL

三. 基本操作

1. 数据库的创建与删除

3 数据操作语言(DML)

4 数据查询语言(DQL)

5 数据控制语言(DCL)

6.事务操作指令


一. 介绍

1. 数据库基础概念

1.1 数据库的定义

    数据库(Database):数据库是一个组织数据的集合,可按照不同的结构和规则存储、管理和检索数据。数据库是用于持久化存储和组织数据的系统。

1.2 数据库管理系统(DBMS)与数据库的关系

  • 数据库管理系统(DBMS):DBMS是一种软件,用于管理数据库的创建、维护、访问和控制。它提供了一种操作数据库的接口,让用户和应用程序能够有效地存储、检索和更新数据。
  • 数据库系统(Database System):数据库系统是由数据库和数据库管理系统(DBMS)组成的集合。它是一个完整的系统,用于管理和操作数据库。

1.3 关系型数据库与非关系型数据库

  • 关系型数据库(RDBMS):关系型数据库是基于关系模型的数据库,使用表格(表)来组织和存储数据。常见的关系型数据库包括MySQL、Oracle、SQL Server等。
  • 非关系型数据库:非关系型数据库采用不同于关系型数据库的数据模型,包括文档存储、键值对存储、列存储和图形数据库等。常见的非关系型数据库包括MongoDB、Redis、Cassandra等。

1.4 数据库基本术语

  •  表(Table):是数据库中存储数据的基本结构,由行和列组成。每一行代表一个记录,每一列代表一个属性。
  •  字段(Field):字段是表中的列,用于存储表中的数据项。
  •  记录(Record):记录是表中的行,包含一组相关的数据。
  •  主键(Primary Key):主键是唯一标识表中记录的字段,确保每条记录都有唯一标识。
  •  外键(Foreign Key):外键是表中的一个字段,它与另一表的主键形成关联,用于建立表与表之间的关系。

1.5 数据库模型

  • 层次模型(Hierarchical Model):层次模型使用树形结构组织数据,每个节点有一个父节点和零个或多个子节点。
  • 关系模型(Relational Model):关系模型使用表格(关系)来组织数据,表格之间通过关系建立连接。
  • 网络模型(Network Model):网络模型采用图形结构,数据之间可以有多对多的关系。

1.6 范式理论

  • 第一范式(1NF):数据表中的每一列都是原子的,不可再分。确保每个单元格中只包含一个值,而不是多个值的集合。
  • 第二范式(2NF):数据表必须符合1NF,并且非主键列完全依赖于主键,而不是依赖于主键的一部分。
  • 第三范式(3NF):数据表必须符合2NF,并且非主键列之间没有传递依赖关系。即,非主键列不依赖于其他非主键列。
  • Boyce-Codd范式(BCNF):数据表必须符合3NF,并且对于所有的超键,每个非主键列都是候选键的超码。
  • 第四范式(4NF):数据表必须符合BCNF,并且不存在多值依赖,即,表中的每个非主键列对于所有候选键都是完全函数依赖的。
  • 第五范式(5NF):数据表必须符合4NF,并且要求对于表中的每一对属性(A,B),都存在一个连接依赖于(A,B)的候选键。

1.7 数据库设计步骤与技巧

  1. 需求分析:确定数据库的目标和用户需求,了解数据的类型、关系和业务规则。
  2. 概念设计:使用概念模型(如实体-关系图)描述数据的结构和关系。
  3. 逻辑设计:将概念模型转换为逻辑模型,选择适当的数据模型(关系型、文档型等)和建立表、关系。
  4. 范式分解:将设计的表逐步规范化到满足特定范式的程度,以提高数据的完整性和减少冗余。
  5.  物理设计:定义数据库的物理存储结构,包括索引、分区、表空间等,以优化性能。
  6. 实施与维护:创建数据库、表,并填充数据。定期维护和优化数据库,确保其性能和可用性。

1.8 实体-关系模型与关系转换

  • 实体-关系模型(ER模型):ER模型是一种用于表示数据结构和关系的图形工具。它使用实体表示现实世界的对象,关系表示实体之间的联系。
  • 关系转换:将ER模型转换为关系模型(关系表)。实体通常对应于表,关系对应于表之间的关系。属性对应于表中的列。
  • 实体转表:ER模型中的每个实体都被转换为一个表。
  • 关系转键:ER模型中的关系通常被转换为外键,将关联的两个实体之间的联系转换为表之间的关系。
  • 属性转列:ER模型中的实体属性通常被转换为表中的列,每个属性对应于一个列。
  • 多对多关系转换:多对多关系通常需要创建一个连接表,将多对多的关系转换为两个一对多的关系。
  • 子类与父类关系转换:ER模型中的继承关系通常需要将子类和父类分别转换为表,使用父类的主键作为子类的外键。

数据库设计是一个复杂的过程,需要综合考虑需求、模型选择、规范化和性能等因素。使用ER模型和范式理论可以帮助设计者建立清晰的概念模型,并通过转换步骤将其转化为实际的数据库结构。

2 MySQL简介

2.1 MySQL的起源与发展历程

  起源:MySQL是一种开源关系型数据库管理系统(RDBMS),最初由瑞典公司MySQL AB开发。该项目的创始人是Michael Widenius、David Axmark和Allan Larsson。MySQL的名称来源于创始人Michael Widenius的女儿名字"My"和"SQL"(结构化查询语言)。

 发展历程:

  •   1995年:MySQL首次发布,成为早期开源数据库之一。
  •   2000年:MySQL AB公司成立,专注于MySQL的开发和支持。
  •   2008年:Sun Microsystems收购MySQL AB。
  •   2010年:Oracle Corporation收购Sun Microsystems,获得MySQL。
  •   2010年至今:MySQL作为Oracle的子公司继续发展,保持开源特性,推出多个版本,支持广泛的操作系统和开发语言。

2.2 MySQL的特点与优势

  • 开源性:MySQL是开源软件,用户可以免费获取、使用和修改其源代码。
  • 跨平台:MySQL支持多种操作系统,包括Linux、Windows、macOS等,具有良好的跨平台性。
  • 高性能:MySQL被设计为高性能数据库,具有快速的读写速度和高并发处理能力。
  • 灵活性:MySQL支持多种存储引擎,如InnoDB、MyISAM等,每个引擎有不同的特性,允许用户根据需求选择合适的引擎。
  • 数据安全:提供强大的权限管理和数据加密功能,确保数据的安全性。
  • 标准兼容:MySQL遵循SQL标准,与许多编程语言和应用程序集成,易于使用。

2.3 MySQL的工作原理

MySQL的工作原理可以概括为以下几个步骤:

1. 连接器(Connection Manager):处理客户端的连接请求,负责建立和维护连接。

2. 查询缓存(Query Cache):如果查询缓存启用,MySQL会检查是否有已经缓存的相同查询,如果有,直接返回缓存的结果。

3. 分析器(Parser):对SQL语句进行语法解析,构建语法树。

4. 优化器(Optimizer):对语法树进行优化,生成执行计划。

5. 执行器(Executor):执行优化后的执行计划,读取、更新数据。

6. 存储引擎(Storage Engine):MySQL支持多种存储引擎,负责实际存储和检索数据。

2.4 MySQL的基本架构以及主要组成部分

MySQL的基本架构包括两个主要部分:MySQL服务器和MySQL客户端。

  • MySQL服务器:包括连接器、查询缓存、分析器、优化器、执行器和存储引擎。服务器负责处理客户端的请求,执行SQL语句,并管理数据库的存储和访问。
  • MySQL客户端:用户通过客户端与MySQL服务器进行通信,提交SQL查询和命令。客户端可以是命令行工具、图形用户界面(GUI)工具或应用程序。

MySQL服务器的主要组成部分包括:

  • 连接器(Connection Manager):负责处理客户端连接请求,建立和维护连接。
  • 查询缓存(Query Cache):缓存已经执行过的查询结果,提高重复查询的性能。
  • 分析器(Parser):** 对SQL语句进行语法解析,构建语法树。
  • 优化器(Optimizer):对语法树进行优化,生成执行计划。
  • 执行器(Executor):执行优化后的执行计划,读取、更新数据。
  • 存储引擎(Storage Engine):负责实际存储和检索数据,MySQL支持多种存储引擎,如InnoDB、MyISAM等。

这些组件协同工作,使MySQL能够高效地处理用户的数据库请求。

二. 安装与配置

1. 下载与安装 MySQL

MySQL的下载途径

MySQL可以通过官方网站或软件仓库等途径进行下载。

1. 官方网站:MySQL官方网站提供了最新的MySQL Community Server版本。用户可以访问 [MySQL Downloads](https://dev.mysql.com/downloads/) 页面,选择适合自己操作系统的MySQL版本进行下载。

2. 软件仓库(Linux):在许多Linux发行版的软件仓库中,可以通过包管理器直接安装MySQL。例如,在Ubuntu系统中,可以使用以下命令安装MySQL:

   sudo apt-get update
   sudo apt-get install mysql-server

安装过程详解(Windows)

Windows 安装过程:

  1. 下载安装程序:在 MySQL 官方网站下载适用于 Windows 的安装程序(通常是一个 .msi 文件)。
  2. 运行安装程序:双击下载的 .msi 文件,启动 MySQL 安装向导。
  3. 选择安装类型:在安装向导中,选择 "Custom"(自定义)或 "Typical"(典型)安装类型。通常选择 "Typical" 即可,除非你需要自定义安装选项。
  4. 设置安装位置:指定 MySQL 的安装目录。默认情况下,安装在 `C:\Program Files\MySQL\MySQL Server-X.Y\` 目录下(X.Y 代表版本号)。
  5. 配置 MySQL 服务:在配置 MySQL 服务时,设置 MySQL 的 root 用户密码,选择启动类型为 "Server Computer"(作为服务器运行)。
  6. 完成安装:点击 "Execute" 按钮开始安装,等待安装完成。
  7. 配置环境变量(可选):将 MySQL 安装目录的 `bin` 目录添加到系统的环境变量中,以便能够在命令行中直接执行 MySQL 相关命令。
  8. 启动 MySQL 服务:完成安装后,可以通过 Windows 服务管理器手动启动 MySQL 服务。

2. 配置 MySQL

配置文件解读

MySQL的配置文件通常是 `my.cnf`(或 `my.ini`)文件,该文件包含了各种配置选项,用于调整 MySQL 服务器的行为和性能。配置文件的位置可能因操作系统而异,可以在 MySQL 安装目录下的 `etc` 文件夹中找到。

一般的配置文件结构如下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

[mysql.server]
user=mysql
basedir=/var/lib

[client]
port=3306
socket=/var/lib/mysql/mysql.sock

- `[mysqld]` 部分包含了与 MySQL 服务器相关的配置项,如数据目录、套接字文件等。
- `[mysql.server]` 部分包含了 MySQL 服务器的配置,如用户、基础目录等。
- `[client]` 部分包含了 MySQL 客户端的配置,如端口、套接字文件等。

修改字符集和时区设置

在 MySQL 配置文件中,可以通过以下配置项来修改字符集和时区设置:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
timezone=+00:00
  •  `character-set-server`:指定服务器默认字符集。
  •  `collation-server`:指定服务器默认排序规则。
  •  `timezone`:指定服务器的时区。

上述示例将字符集设置为 `utf8mb4`,排序规则设置为 `utf8mb4_unicode_ci`,时区设置为 UTC。

配置用户权限与访问控制

MySQL 使用访问控制列表(Access Control Lists,ACLs)来管理用户权限。在配置文件中,可以通过以下配置项来设置用户权限和访问控制:

[mysqld]
# 允许远程连接
bind-address = 0.0.0.0

# 设置root用户的密码
mysql_native_password = ON

# 定义允许访问的IP地址
skip-name-resolve

上述示例中:
- `bind-address` 允许远程连接到 MySQL 服务器。
- `mysql_native_password` 配置密码认证方式。
- `skip-name-resolve` 禁用 DNS 反解析,提高性能。

在 MySQL 中,可以使用 `GRANT` 语句分配用户权限,例如:

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

其中:

  • `database_name` 是数据库名。
  •  `username` 是用户名称。
  •  `host` 是允许访问的主机。
  •  `password` 是用户密码。

修改配置文件后,需要重启 MySQL 服务器使配置生效。在 Linux 系统中,可以使用以下命令:

sudo service mysql restart

在 Windows 系统中,可以在服务管理器中重启 MySQL 服务。

三. 基本操作

1. 数据库的创建与删除

创建数据库

在 MySQL 中,可以使用 `CREATE DATABASE` 语句创建数据库。语法如下:

CREATE DATABASE [IF NOT EXISTS] database_name
  [CHARACTER SET charset_name]
  [COLLATE collation_name];

- `IF NOT EXISTS`:可选,如果指定了此选项,表示如果数据库已存在,则不会报错,而是继续执行后续语句。
- `database_name`:指定要创建的数据库的名称。
- `CHARACTER SET charset_name`:可选,指定数据库的默认字符集。
- `COLLATE collation_name`:可选,指定数据库的默认排序规则。

删除数据库

在 MySQL 中,可以使用 `DROP DATABASE` 语句删除数据库。语法如下:

DROP DATABASE [IF EXISTS] database_name;

- `IF EXISTS`:可选,如果指定了此选项,表示如果数据库不存在,则不会报错,而是继续执行后续语句。
- `database_name`:指定要删除的数据库的名称。

2. 数据表的操作

创建数据表

在 MySQL 中,可以使用 `CREATE TABLE` 语句创建数据表。语法如下:

CREATE TABLE table_name (
  column1 datatype1,
  column2 datatype2,
  ...
);

- `table_name`:指定要创建的数据表的名称。
- `column1, column2, ...`:定义表的列,每列包括列名和数据类型。
- `datatype1, datatype2, ...`:定义每列的数据类型。

修改数据表结构

添加列

使用 `ALTER TABLE` 语句添加新列。语法如下:

ALTER TABLE table_name
ADD COLUMN new_column datatype;

修改列

使用 `ALTER TABLE` 语句修改列的数据类型。语法如下:

ALTER TABLE table_name
MODIFY COLUMN column_name new_datatype;

删除列

使用 `ALTER TABLE` 语句删除列。语法如下:

ALTER TABLE table_name
DROP COLUMN column_name;

删除数据表

在 MySQL 中,可以使用 `DROP TABLE` 语句删除数据表。语法如下:

DROP TABLE [IF EXISTS] table_name;

- `IF EXISTS`:可选,如果指定了此选项,表示如果数据表不存在,则不会报错,而是继续执行后续语句。
- `table_name`:指定要删除的数据表的名称。

注意:删除数据表会永久删除表及其所有数据,谨慎操作,确保备份重要数据。在生产环境中,最好在删除数据表之前先进行数据备份。

3 数据操作语言(DML)

插入数据

使用 `INSERT INTO` 语句可以向表中插入新的数据。语法如下:

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

- `table_name`:指定要插入数据的表。
- `column1, column2, ...`:指定要插入数据的列。
- `VALUES (value1, value2, ...)`:指定要插入的数据值,与列一一对应。

查询数据

数据查询已在前面的回答中介绍,使用 `SELECT` 语句可以从表中检索数据。

示例:

SELECT id, username, email
FROM users
WHERE birthdate >= '1990-01-01';

以上示例查询了 `users` 表中出生日期在1990年1月1日及之后的用户数据。

更新数据

使用 `UPDATE` 语句可以更新表中已有的数据。语法如下:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

- `table_name`:指定要更新数据的表。
- `column1 = value1, column2 = value2, ...`:指定要更新的列及其新值。
- `WHERE condition`:可选,指定更新数据的条件。

删除数据

使用 `DELETE FROM` 语句可以从表中删除数据。语法如下:

DELETE FROM table_name
WHERE condition;

- `table_name`:指定要删除数据的表。
- `WHERE condition`:可选,指定删除数据的条件。

注意:删除数据是一个谨慎的操作,务必确保你了解删除的范围,并在删除之前进行数据备份。

4 数据查询语言(DQL)

基本查询语句

在 MySQL 中,使用 `SELECT` 语句进行基本的数据查询。语法如下:

SELECT column1, column2, ...
FROM table_name
[WHERE condition];

- `column1, column2, ...`:要查询的列。
- `table_name`:要查询的数据表。
- `WHERE condition`:可选,用于指定查询的条件。

条件查询

使用 `WHERE` 子句可以在查询中添加条件,过滤满足条件的数据。语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

排序与分页

使用 `ORDER BY` 子句可以对查询结果进行排序,使用 `LIMIT` 子句可以实现分页。语法如下:

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name [ASC|DESC]
LIMIT offset, count;

- `ORDER BY column_name [ASC|DESC]`:指定排序的列及排序方式(升序或降序)。
- `LIMIT offset, count`:指定返回结果的起始位置和数量。

聚合函数与分组

在查询中使用聚合函数对数据进行统计和计算,同时使用 `GROUP BY` 子句进行分组。常用的聚合函数包括 `COUNT`、`SUM`、`AVG`、`MIN` 和 `MAX`。语法如下:

SELECT AGGREGATE_FUNCTION(column) AS result_column, ...
FROM table_name
[WHERE condition]
GROUP BY grouping_column;

多表查询

使用 `JOIN` 子句可以实现多表查询,将两个或多个表的数据合并。常见的 `JOIN` 类型有 `INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN` 和 `FULL JOIN`。语法如下:

SELECT column1, column2, ...
FROM table1
JOIN table2 ON table1.column_name = table2.column_name;

多表查询的 `JOIN` 类型和关联条件需要根据实际需求选择,以确保查询结果符合预期。

5 数据控制语言(DCL)

数据控制语言(DCL)主要用于控制数据库中的访问权限和事务管理。主要包括 `GRANT` 和 `REVOKE` 语句。

GRANT

`GRANT` 语句用于授予用户或角色某些特定的权限。语法如下:

GRANT privilege(s)
ON object
TO user_or_role [, user_or_role, ...];

- `privilege(s)`:指定要授予的权限,可以是数据库级别、表级别或列级别的权限。
- `ON object`:指定权限作用的对象,可以是数据库、表或视图。
- `TO user_or_role`:指定被授予权限的用户或角色。

REVOKE

`REVOKE` 语句用于撤销用户或角色的某些权限。语法如下:

REVOKE privilege(s)
ON object
FROM user_or_role [, user_or_role, ...];

- `privilege(s)`:指定要撤销的权限,与 `GRANT` 中的权限相对应。
- `ON object`:指定权限作用的对象,与 `GRANT` 中的对象相对应。
- `FROM user_or_role`:指定被撤销权限的用户或角色。

6.事务操作指令

在数据库中,事务处理是一种关键的机制,用于确保一组操作要么全部成功执行,要么全部回滚到初始状态。以下是与事务处理相关的 SQL 命令:

1. 开始事务

在大多数关系型数据库中,使用 `START TRANSACTION` 或者直接 `BEGIN` 命令来开始一个事务。

2. 提交事务

如果一组操作成功执行,可以使用 `COMMIT` 命令来提交事务,使其永久生效。

3. 回滚事务

如果在事务执行过程中发生错误或者需要撤销之前的操作,可以使用 `ROLLBACK` 命令来回滚事务,使其回到初始状态。

4. 设置保存点

在事务处理中,有时候需要设置保存点(Savepoint),以便在事务中的某个阶段回滚,而不是回滚整个事务。

SAVEPOINT savepoint_name;

5. 回滚到保存点

如果需要回滚到之前设置的保存点,可以使用 `ROLLBACK TO` 命令。

ROLLBACK TO savepoint_name;

6. 设置事务隔离级别

事务隔离级别决定了一个事务对数据库中数据的可见性。常见的事务隔离级别包括 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

SET TRANSACTION ISOLATION LEVEL isolation_level;

其中,`isolation_level` 可以是 `READ UNCOMMITTED`、`READ COMMITTED`、`REPEATABLE READ` 或 `SERIALIZABLE`。

7. 结束事务

在一些数据库中,可以使用 `END` 命令结束事务。

上述命令用于基本的事务处理。具体的使用方式可能会因数据库管理系统而异,建议参考相应数据库的文档以了解详细信息。

你可能感兴趣的:(数据库,mysql)