MySQL笔记---数据库基础
1. 什么是数据库
简单来说,数据库(Database)是一个有组织、可高效存储、管理和访问数据的系统,它并非简单的 “文件集合”,而是通过特定规则将数据结构化,解决 “大量数据如何有序、安全、快速使用” 的核心问题。
1.1 数据库的特性
数据库的设计围绕 “高效、安全、可靠” 展开,核心特性包括:
- 结构化存储:数据按 “表 - 字段 - 记录” 的逻辑组织。例如 “用户表” 包含 “用户 ID、姓名、手机号” 等字段,每一行是一个用户的具体数据(记录)。
- 高效访问:通过 “索引”(类似书籍目录)快速定位数据,即使是亿级数据,也能快速筛选。
- 数据完整性:通过 “约束规则” 确保数据准确。例如:
- 主键约束:“用户 ID” 必须唯一(不重复);
- 外键约束:“订单表” 的 “用户 ID” 必须在 “用户表” 中存在(避免无效订单);
- 格式约束:“手机号” 必须是 11 位数字。
- 并发控制:多用户同时操作时,自动协调优先级,避免冲突。例如:A 和 B 同时给同一用户充值,数据库会确保最终余额是 “原余额 + A 充值 + B 充值”,而非覆盖。
- 安全与备份:支持细粒度权限(如 “客服只能看订单,不能改价格”),并可定时备份数据,防止误删或系统故障导致数据丢失。
1.2 数据库与普通文件的对比
我们日常用的 Excel 表格、TXT 文档也能存数据,但面对大量、多用户共享、高频修改的数据时,就会暴露明显缺陷。数据库的价值,正是弥补这些缺陷:
对比维度 | 普通文件(如 Excel) | 数据库(如 MySQL) |
数据量 | 适合小数据(如几百行),量大时卡顿 | 支持海量数据(千万 / 亿行),性能稳定 |
多用户共享 | 多人同时修改易冲突(如覆盖内容) | 支持并发操作,自动避免冲突 |
查询效率 | 复杂筛选(如多条件匹配)速度慢 | 通过 “索引” 等技术,毫秒级查询 |
数据安全性 | 易误删、篡改,无权限控制 | 支持权限管理(如只读 / 修改权限)、备份恢复 |
数据一致性 | 无法自动校验(如手机号格式错误) | 可设置 “约束”(如手机号必须 11 位) |
1.3 DBMS(数据库管理系统)、数据库、表
实际上,我们说的 “使用MySQL数据库” 的说法并不准确,准确的说法是 “使用MySQL数据库管理系统来管理数据库” 。
“数据库” 和 “DBMS”(数据库管理系统),二者其实是 “数据集合” 与 “管理工具” 的关系:
- 数据库(Database):本质是 “按规则存储的数据集合”(类似 “仓库里的货物”);
- DBMS(数据库管理系统):操作和管理数据库的软件(类似 “仓库管理员”)。
目前市面上主流的数据库(这里指DBMS)基本上都是关系型数据库,这类数据库存储数据依靠的是一种被称作 “表” 的二维结构。
所谓表,实际上就是同一种结构化对象的集合罢了,例如student表:
通常来说,数据库就是一个被DBMS管理起来的文件目录(数据库中的表,就是目录中的文件),而数据库本质上是一个网络服务,分为客户端与服务器,以支持远程访问:
1.4 数据库存储引擎
数据库存储引擎(Storage Engine)是关系型数据库管理系统(RDBMS)中负责数据存储、检索、更新和管理的核心组件,它决定了数据在磁盘上的存储格式、索引方式、事务支持、锁机制等底层行为。
简单说,存储引擎就像数据库的 “文件系统”,但比普通文件系统更针对数据库的特性(如事务、查询优化)设计。不同存储引擎有不同的优势,选择合适的引擎直接影响数据库的性能、可靠性和功能支持。
我们登录数据库之后,可以输入如下语句来查询数据库支持的存储引擎:
show engines;
在MySQL中,最常用的三种引擎如下:
特性 / 引擎 | InnoDB | MyISAM | Memory |
事务支持 | 支持(ACID) | 不支持 | 不支持 |
外键约束 | 支持 | 不支持 | 不支持 |
锁机制 | 行级锁(并发好) | 表级锁(并发差) | 表级锁 |
崩溃恢复 | 支持(通过日志) | 不支持(可能丢失数据) | 不支持(重启丢失) |
全文索引 | 支持(5.6+) | 支持 | 不支持 |
存储位置 | 磁盘 | 磁盘 | 内存 |
适用场景 | 事务、高并发读写 | 读多写少、静态数据 | 临时缓存、小表 |
三者当中最最常用的、被用作MySQL默认引擎的是谁呢?好难猜呀。
要修改数据库使用的存储引擎也很简单,修改配置文件 “/etc/my.cnf” 或 “/etc/mysql/my.cnf”:
然后重启数据库服务。
2. 如何登录数据库
mysql [选项]
MySQL 客户端(mysql 命令)提供了丰富的登录选项,用于指定连接参数、身份验证等。以下是常用的登录选项及用法说明:
选项简写 | 选项全称 | 作用描述 | 示例 |
-u | --user=用户名 | 指定登录的 MySQL 用户名(必需) | mysql -u root(使用 root 用户登录) |
-p | --password |
|
|
-h | --host=主机名 | 指定连接的 MySQL 服务器地址(默认是 localhost,即本地) | mysql -u root -p -h 192.168.1.100(连接远程服务器) |
-P | --database=库名 | 指定 MySQL 服务器的端口(默认是 3306,若服务器端口修改需显式指定) | mysql -u root -p -h 127.0.0.1 -P 3307(连接 3307 端口) |
-D | --database=库名 | 登录后直接切换到指定数据库(等价于登录后执行 use 库名) | mysql -u root -p -D test(登录后直接进入 test 数据库) |
-e | --execute=SQL | 登录后直接执行指定 SQL 语句,执行完自动退出(常用于脚本) | mysql -u root -p -e "SELECT VERSION();"(执行版本查询并退出) |
--protocol | --protocol=协议 | 指定连接协议(可选:tcp、socket、pipe、memory,默认自动选择) | mysql -u root -p --protocol=tcp(强制使用 TCP 协议连接) |
--ssl | --ssl | 启用 SSL 加密连接(若服务器配置了 SSL 需显式指定) | mysql -u root -p --ssl(使用 SSL 加密连接) |
-V | --version | 显示 MySQL 客户端版本,不登录服务器 | mysql -V 或 mysql --version |
--help | --help | 显示所有可用选项的帮助信息 | mysql --help |
退出很简单,输入 “quit” 即可:
3. SQL语言
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库(RDBMS)的标准编程语言,核心作用是实现对数据库中数据的 “查询、插入、修改、删除” 以及对数据库结构(表、视图、权限等)的管理。
它是所有关系型数据库(如 MySQL、Oracle、SQL Server、PostgreSQL 等)的通用交互语言,也是数据领域(开发、运维、分析)的基础工具。
简单来说,SQL语言本质上就是一种解释型的语言(类似shell)。而MDBS的客户端就是这种语言的解释器(类似bash)。
在Linux命令行当中,bash解释我们输入的shell语句,进而与操作系统交互。
而当我们登录mysql之后,命令行就相当于被mysql客户端夺舍了,mysql客户端解释我们输入的SQL语句,进而与服务器进行交互。
我们在vscode当中我们开启两个终端,一个登录mysql,一个不登陆:
可以看到,一个显示的命令行解释器为mysql,另一个显示的是bash。
实际上python也是一样的道理,这就是所谓的脚本语言。
3.1 SQL语句的分类
根据操作目的,SQL 可分为 5 大类,每类对应不同的数据库操作场景,以下是常用分类及典型命令:
分类 | 英文全称 | 核心作用 | 常用命令示例 |
数据查询 (DQL) | Data Query Language | 从数据库中 “提取数据”(最常用) | SELECT(查询)、FROM(指定表)、WHERE(条件筛选)、GROUP BY(分组)、ORDER BY(排序) |
数据操纵 (DML) | Data Manipulation Language | 对数据进行 “增、改、删” | INSERT(插入)、UPDATE(修改)、DELETE(删除) |
数据定义 (DDL) | Data Definition Language | 定义 / 修改数据库 “结构”(表、视图等) | CREATE(创建,如建表CREATE TABLE)、ALTER(修改,如改表结构ALTER TABLE)、DROP(删除,如删表DROP TABLE)、TRUNCATE(清空表数据) |
数据控制 (DCL) | Data Control Language | 管理数据库 “权限” 和 “访问控制” | GRANT(授予权限,如给用户查表权限)、REVOKE(回收权限)、CREATE USER(创建用户) |
事务控制(TCL) | Transaction Control Language | 保证数据操作的 “原子性、一致性”(避免数据异常) | COMMIT(提交事务,确认操作)、ROLLBACK(回滚事务,撤销操作)、SAVEPOINT(设置事务保存点) |