☰
MySQL基础学习笔记
2026/10/22 7:10:49 网站建设 项目流程

一、基础概念

  1. DB、DBMS、SQL 区分
  • DB:数据库,用来存放真实业务数据。类比:一个 Excel 文件。
  • DBMS:数据库管理系统,管理数据库软件,MySQL 就是 DBMS。类比 WPS/Excel 软件。
  • SQL:结构化查询语言,专门操作关系型数据库,不属于编程语言。

关系型数据库:数据存储为二维表格,表和表之间可以建立关联。

2.MySQL 基础配置

  • 默认端口:3306,修改端口后防火墙需要同步放行。
  • 安装注意:安装路径、电脑主机名禁止中文,否则极易出现编码乱码。
  • 字符集差异:
    • MySQL5.7:默认latin1,不支持中文,配置文件 my.ini 要手动改成utf8mb4。
    • MySQL8.0:默认utf8mb4,完整支持中文与 emoji 表情。

二、客户端连接 & 常用基础命令

2.1 命令行连接语法

mysql -h主机地址 -P端口号 -u用户名 -p

参数说明:

  • -h:服务地址,本机填127.0.0.1或者localhost
  • -P:端口,大写 P,默认 3306;多实例场景填写自定义端口
  • -u:用户名,最高权限账号 root
  • -p:密码,小写 p,建议回车后再输入密码,不要直接写在命令行,防止泄露到历史记录。

示例:

#连接本机默认实例 mysql -h localhost -P 3306 -u root -p

2.2 终端内高频指令

命令功能
show databases;查看全部数据库
use 库名;切换指定数据库,操作表前必须执行,否则报错未选择数据库
show tables;查看当前库下面所有数据表
desc 表名;查看表结构(字段、类型、是否允许 NULL、主键、默认值),完整写法describe,不能简写 des
select version();查看 MySQL 版本
source 绝对路径导入本地 sql 脚本文件
exit / quit退出 mysql 客户端

注意:SQL 语句末尾必须加分号;作为结束标记,忘记分号命令行会一直等待输入。

2.3 可视化工具 Navicat / DBeaver

连接要素:连接别名、主机、端口、账号密码。

坑点:MySQL8.0 用户密码加密插件是caching_sha2_password,旧版 DBeaver 驱动会报密码异常。两种处理:①修改用户加密方式为旧版;②升级驱动包。 工作环境很多老项目依旧使用 MySQL5.7,排错优先确认数据库版本。

三、SQL 四大语言分类

类型全称作用代表关键字
DDL数据定义语言操作库、表结构,建 / 改 / 删对象CREATE、ALTER、DROP、TRUNCATE
DML数据操作语言表内部数据增删改INSERT、UPDATE、DELETE
DQL数据查询语言专门做数据查询,开发写的最多SELECT
DCL数据控制语言账号权限分配回收GRANT、REVOKE

四、通用 SQL 语法规则

  1. 语句结束:英文分号;;\G可以把查询结果竖排展示,阅读长记录很方便。
  2. 换行缩进:一条 SQL 可以拆多行写,缩进提升可读性。
  3. 符号区分(高频踩坑)
  • 反引号`:包裹库名、表名、字段名。如果名字刚好是 SQL 关键字,必须加反引号,例select * from `order`;
  • 单引号' ':包裹字符串常量,跨数据库(Oracle 等)通用,写字符串优先单引号。
  • 双引号" ":MySQL 可以用来写列别名,别名带空格中文时使用。

4.注释写法

#单行注释 -- 单行注释(--后面必须有空格) /* 多行注释,可以写多行文本 */

5.大小写:SQL 关键字大小写不敏感;Linux 服务器上表名区分大小写,Windows 不区分。

五、SELECT 基础查询 DQL

5.1 查询基础写法

-- 查询常量表达式 SELECT 10, 20, 3+5; -- 查询指定字段 SELECT id,name FROM user; -- 查询全部字段,生产环境不推荐*,会读取全部列,性能差,表结构变更容易出问题 SELECT * FROM user;

5.2 列别名、表别名 AS

AS关键字可以省略;别名仅改变输出结果,原表字段名不变。

-- 标准别名 SELECT id AS user_id, name AS username FROM user AS u; -- 省略AS简写 SELECT id user_id, name username FROM user u; -- 别名含中文空格,双引号包裹 SELECT salary AS "员工薪资" FROM user;

表别名作用:多表关联的时候限定字段,避免字段重名冲突,u.id。

5.3 DISTINCT 去重

DISTINCT紧跟 SELECT 之后,对后面全部字段组合去重,不是只作用第一个字段。

--单列去重 SELECT DISTINCT department FROM emp; --多字段组合去重 SELECT DISTINCT department,job FROM emp;

NULL 值会被合并,多条 NULL 只会保留一行。

六、WHERE 条件过滤 & NULL 重点

NULL 含义:未知,不等于 0,不等于空字符串 ''。任何运算只要包含 NULL,结果直接返回 NULL。

6.1 NULL 判断易错

错误写法:where col = NULL,永远查不到数据。

正确:IS NULL、IS NOT NULL;安全等于<=>可以识别 NULL。

--查询绩效为空的员工 SELECT name FROM emp WHERE commission IS NULL; --绩效不为空 SELECT name FROM emp WHERE commission IS NOT NULL;

IFNULL(字段,默认值)函数,当字段是 NULL 的时候,使用传入的默认值代替。

-- 如果commission为null,按0计算薪资 SELECT salary * (1 + IFNULL(commission,0)) FROM emp;

6.2 各类运算符

  1. 算术运算符+ - * / DIV % MOD

隐式转换:字符串参与运算会尝试转数字;无法转数字的字符串当作 0 参与计算。

SELECT 1+'2'; --结果 3 SELECT 1+'abc'; --结果1

2.比较运算符=、<>/!=、><>=<=;<=>安全等于,支持 NULL 比较。

只要条件里出现 NULL,比较结果返回 NULL,不是 true/false。

3.区间、列表、模糊匹配

  • BETWEEN A AND B:闭区间,等价>=A AND <=B,包含两端值。
  • IN(值1,值2)判断字段是否在列表中;NOT IN不在列表。
  • LIKE模糊匹配:%匹配任意数量字符,_匹配单个字符。
--名字带a SELECT name FROM emp WHERE name LIKE '%a%'; --S开头,一共5个字符 SELECT name FROM emp WHERE name LIKE 'S____';

如果要匹配字符_、%本身,使用ESCAPE指定转义符号。

  • REGEXP正则匹配,直接写正则表达式完成匹配。

4.逻辑运算符NOT>AND>OR,优先级 NOT 最高,复杂条件建议手动加括号,不要依赖默认优先级。

七、排序 ORDER BY 与分页 LIMIT

7.1 ORDER BY 排序

执行顺序:WHERE之后,LIMIT之前。

  • ASC升序,默认;DESC降序。
  • 多字段排序:只有前面字段值相等,才会使用后面字段排序;每个字段可以单独指定升降序。
--部门升序,部门相同工资降序 SELECT name,dept,salary FROM emp ORDER BY dept ASC, salary DESC;

坑点:

  1. WHERE不能使用列别名;ORDER BY可以使用别名。中文别名要使用反引号,不要用双引号,双引号会识别成字符串常量。
  2. NULL 排序:ASC 时 NULL 排在最前面;DESC 时 NULL 排在最后。
  3. 如果排序字段存在重复值,排序结果是不稳定的,分页会出现重复 / 丢失数据,建议最后追加主键 id 排序保证确定性。

7.2 LIMIT 分页(MySQL 特有)

语法两种等价写法:

LIMIT 偏移量,行数; LIMIT 行数 OFFSET 偏移量;

偏移量从0 开始计数,整条 SQL 语句写在最后面。

分页公式:第 n 页,每页 m 条:LIMIT (n-1)*m , m

--第一页,10条 SELECT * FROM emp LIMIT 0,10; --第二页,10条 SELECT * FROM emp LIMIT 10,10;

分页必须搭配 ORDER BY,否则数据顺序随机,分页错乱。Oracle 使用 ROWNUM,SQL Server 使用 OFFSET FETCH,没有 LIMIT 语法。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询