MySQL 基础概念
数据库: 用于存储和组织结构化数据的系统。它是一个电子化的数据仓库,可以方便地管理、访问和更新大量数据。在数据库中,数据按照一定的规则和结构进行组织和存储,以便于对数据进行检索、处理和管理。数据库通常由多个表格(或称为关系)组成,每个表格包含了一组相关的数据字段(列)和数据记录(行)。
MySQL 数据库的基础概念、SQL 语句分类、常用命令及数学运算。内容涵盖条件查询、排序、数据处理函数、分组查询、连接查询与子查询等核心操作。此外,还深入讲解了增删改查(CRUD)、表约束、事务特性(ACID)及隔离级别、索引原理与优化策略、视图的使用以及数据库设计的三大范式。旨在帮助初学者系统掌握 MySQL 的核心知识与实践技巧。

数据库: 用于存储和组织结构化数据的系统。它是一个电子化的数据仓库,可以方便地管理、访问和更新大量数据。在数据库中,数据按照一定的规则和结构进行组织和存储,以便于对数据进行检索、处理和管理。数据库通常由多个表格(或称为关系)组成,每个表格包含了一组相关的数据字段(列)和数据记录(行)。
数据库管理系统(DBMS): 用于管理和操作数据库的软件系统。它提供了一系列的工具和功能,用于创建、访问、维护和控制数据库。
常见的数据库管理系统包括: 关系型数据库(如 MySQL、Oracle、SQL Server)、非关系型数据库(如 MongoDB、Redis)等。
表: 在关系型数据库中,表是一种数据结构,用于存储和组织数据。它由行和列组成。表可以被看作是一个二维的数据表格,其中每一列代表一个字段,每一行代表一条记录。
数据定义语言(DDL): 用于创建、修改和删除数据库对象,如数据库、表、视图、索引等。常见的 DDL 语句包括:
CREATE:创建数据库对象ALTER:修改数据库对象的结构DROP:删除数据库对象数据操作语言(DML): 用于查询、插入、更新和删除数据。常见的 DML 语句包括:
SELECT:查询数据INSERT:插入数据UPDATE:更新数据DELETE:删除数据数据查询语言(DQL): 专门用于查询数据,是 DML 的子集,用于从数据库中检索数据。
数据控制语言(DCL): 用于授权和权限管理。常见的 DCL 语句包括:
GRANT:授予用户权限REVOKE:撤销用户权限事务控制语言(TCL): 用于管理数据库中的事务。常见的 TCL 语句包括:
COMMIT:提交事务ROLLBACK:回滚事务SAVEPOINT:设置保存点查看 MySQL 数据库的版本号:
SELECT VERSION();
启动 MySQL 服务(基于 Windows):
net start mysql
停止 MySQL 服务:
net stop mysql
登录 MySQL 数据库:
mysql -u 用户名 -p
其中,用户名 是 MySQL 用户名,接着根据系统提示输入密码即可。
如果安装 MySQL 时没有设置 root 密码,可以使用以下命令登录:
mysql -u root
退出 MySQL 命令行界面:
EXIT 或 QUIT
显示所有的数据库名:
SHOW DATABASES;
创建数据库:
CREATE DATABASE 数据库名;
切换到特定的数据库:
USE 数据库名;
查看当前使用的数据库名:
SELECT DATABASE();
删除数据库:
DROP DATABASE 数据库名;
显示数据库中的表:
SHOW TABLES;
创建表:
CREATE TABLE 表名 (
列名 1 数据类型,
列名 2 数据类型,
...
);
删除表:
DROP TABLE 表名;
向表中插入数据:
INSERT INTO 表名 (列名 1, 列名 2, ...)
VALUES (具体值 1, 具体值 2, ...);
在表中查询特定的数据:
SELECT 列名 1, 列名 2, ...
FROM 表名
WHERE 查询条件;
不需要查询条件时:
SELECT 列名 1, 列名 2, ...
FROM 表名;
获取某表的所有数据:
SELECT * FROM 表名;
获取某表的结构:
DESC 表名;
-- 也可使用
DESCRIBE 表名;
更改表中某列的名字:
ALTER TABLE 表名 RENAME COLUMN 原始列名 TO 新列名;
为表中某列指定一个别名(并不改变表结构中列的名称):
SELECT 原始列名 AS 新列名 FROM 表名;
加法: 使用 + 运算符执行加法运算。
SELECT column1 + column2 AS sum FROM 表名; -- 执行加法运算后的结果列指定别名为 sum
SELECT column1 + 10 FROM 表名; -- 也可以不指定别名
减法: 使用 - 运算符执行减法运算。
SELECT column1 - column2 AS diff FROM 表名;
乘法: 使用 * 运算符执行乘法运算。
SELECT column1 * column2 AS product FROM 表名;
SELECT column1 * 10 AS product FROM 表名; -- 数值扩大十倍
除法: 使用 / 运算符计算除法。
SELECT column1 / column2 AS division FROM 表名;
取余: 使用 % 运算符计算两个数的余数。
SELECT column1 % column2 AS remainder FROM 表名;
其它运算: POWER() 函数用于计算幂次方,SQRT() 函数用于计算平方根,ABS() 函数用于获取绝对值等等。
MySQL 中的条件查询是通过使用 WHERE 子句来筛选满足特定条件的数据。
基本语法:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
常见运算符示例:
等于 (=) 运算符:
SELECT * FROM table_name WHERE column_name = value;
不等于 (<> 或 !=) 运算符:
SELECT * FROM table_name WHERE column_name <> value;
大于 (>) 运算符:
SELECT * FROM table_name WHERE column_name > value;
小于 (<) 运算符:
SELECT * FROM table_name WHERE column_name < value;
大于等于 (>=) 运算符:
SELECT * FROM table_name WHERE column_name >= value;
小于等于 (<=) 运算符:
SELECT * FROM table_name WHERE column_name <= value;
BETWEEN 运算符:
-- 第一种方式
SELECT * FROM table_name WHERE column_name >= value1 AND column_name <= value2;
-- 第二种方式
SELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2;
-- value1 必须小于 value2
模糊匹配 (LIKE) 运算符:
SELECT * FROM table_name WHERE column_name LIKE pattern;
条件查询还可以通过逻辑运算符(例如 AND, OR, NOT)组合多个条件。
NULL 运算符:
SELECT * FROM table_name WHERE column_name IS NULL;
这将返回所有 column_name 列中值为 NULL 的行。
IN 运算符: IN 运算符用于在查询中匹配多个值。它允许您指定一个值列表,并检查某个列是否与该列表中的任何值匹配。
SELECT * FROM table_name WHERE column_name IN (value1, value2, value3);
例如:
SELECT * FROM users WHERE country IN ('USA', 'Canada', 'UK');
注意:IN 后跟的是具体的值,并不是一个区间。
逻辑运算符优先级:
在 MySQL 中,AND 运算符的优先级高于 OR 运算符。这意味着当查询中同时存在 AND 和 OR 运算符时,AND 运算符的条件会首先进行计算,然后再计算 OR 运算符的条件。
SELECT * FROM table_name WHERE condition1 AND condition2 OR condition3;
-- 等价于
SELECT * FROM table_name WHERE (condition1 AND condition2) OR condition3;
可以使用括号来明确指定优先级。
通配符:
% 表示零个或多个字符的任意序列。
pattern%%pattern%pattern%_ 表示匹配任意单个字符的位置。在 MySQL 中使用 ORDER BY 子句来对结果进行排序。ORDER BY 子句允许指定一个或多个列作为排序依据,并指定升序(ASC)或降序(DESC)进行排序。
单列排序:
SELECT * FROM table_name ORDER BY column_name ASC;
多列排序:
SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC;
使用别名排序:
SELECT column_name AS alias_name FROM table_name ORDER BY alias_name ASC;
数字排序:
SELECT * FROM table_name ORDER BY 1;
排序时将结果集中在第一个字段。
注意,ORDER BY 子句应该位于查询语句的末尾。如果查询中使用了 LIMIT 子句,则结果将首先根据排序顺序进行排序,然后再进行限制。
指在 SQL 中用于处理单个值的函数。它们接受一个或多个输入参数,并返回一个单一的结果。
UPPER():将字符串转换为大写。LOWER():将字符串转换为小写。LENGTH():返回字符串的长度。SUBSTRING():提取字符串的一个子串。CONCAT():将多个字符串连接起来。TRIM():去除字符串前后的空格。ROUND():对数值进行四舍五入。ABS():返回数值的绝对值。COALESCE():返回参数列表中第一个非空的值。NOW():返回当前日期和时间。指在 SQL 中用于处理多个值的函数。它们接受多个输入参数,并返回一个结果集。
COUNT():计算满足条件的行数。SUM():计算数值列的总和。AVG():计算数值列的平均值。MIN() 和 MAX():分别返回数值列的最小值和最大值。GROUP_CONCAT():将多行值连接为一个字符串。GROUP BY 子句:按照指定的列对结果进行分组。HAVING 子句:在 GROUP BY 分组结果上进行过滤。分组查询是一种在 SQL 中使用 GROUP BY 子句对结果进行分组的操作。它结合了聚合函数,可以对数据集按照一个或多个列进行分组,并对每个分组应用聚合函数计算。
语法:
SELECT 列 1, 列 2, ..., 聚合函数 (column)
FROM 表名
GROUP BY 列 1, 列 2, ...
执行顺序:
HAVING 子句:
HAVING 子句用于在 GROUP BY 子句之后对分组进行条件过滤。与 WHERE 不同,WHERE 在分组前过滤,HAVING 在分组后过滤。
DISTINCT 关键字用于从结果集中选择唯一的记录,并去除重复。
SELECT DISTINCT email
FROM customers;
如果在 SELECT 语句中选择多列,并且希望根据多列进行唯一性判断和去重,只需将多列包含在 SELECT DISTINCT 子句中。
连接查询用于在多个表之间建立关系,并检索满足特定条件的数据。
内连接与外连接的区别:
子查询(Subquery)是指在一个查询语句中嵌套另一个完整的查询语句。
UNION ALL。OFFSET 配合跳过前几行。SQL 查询语句模板:
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
LIMIT ...
CREATE TABLE table_name (
column1 data_type,
column2 data_type,
PRIMARY KEY (column_name)
);
DROP TABLE table_name;
INSERT INTO table_name (column1, ...) VALUES (value1, ...);
UPDATE 表名 SET 列名 1 = 新值 1 WHERE 条件;
DELETE FROM 表名 WHERE 条件;
约束用于定义和强制表中数据的完整性规则。
事务是数据库管理系统中的一种机制,用于确保数据库操作的一致性和完整性。它将一系列操作作为一个单元,要么全部成功,要么全部回滚。
ACID 特性:
事务隔离级别:
索引是用于提高数据检索效率的数据结构,类似于书籍目录。
常见类型:
索引失效场景:
LIKE '%abc')。视图是在数据库中基于查询结果定义的虚拟表,不直接存储数据。
好处:
创建与删除:
CREATE VIEW view_name AS SELECT ...;
DROP VIEW [IF EXISTS] view_name;
mysqldump 导出数据库,确保数据安全。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online