MySQL核心概念与SQL语句实操教程

洛溪
洛溪
发布时间:2026-10-13| 5人浏览过
原创

掌握 MySQL 的基础操作是高效处理数据的关键。本文系统梳理了从创建数据库、设计表结构(含约束)、执行 CRUD 操作,到进阶的多表联合查询及自动化逻辑(存储过程、触发器)编写。通过标准化的语法示例和注意事项,帮助开发者建立规范的 SQL 使用习惯,避免常见的权限或数据错误。

数据库与表的基本管理

在开始数据操作前,需明确数据库与表的生命周期管理。创建数据库时应规范字符集以支持中文等多字节字符;创建表时需定义字段类型及属性。

第1步:创建并配置数据库

目的是初始化一个具备正确编码规则的数据容器。默认使用 utf8 或 utf8mb4 以防止乱码。

-- 查看当前所有数据库
SHOW DATABASES;

-- 创建指定字符集的数据库
CREATE DATABASE day15 DEFAULT CHARACTER SET utf8;

-- 查看已创建的数据库结构及字符集信息
SHOW CREATE DATABASE day15;

第2步:修改与删除数据库

注意:删除操作不可逆,且会影响该库下的所有表和数据。

-- 修改数据库默认字符集
ALTER DATABASE day15 DEFAULT CHARACTER SET gbk;

-- 慎重操作:彻底删除数据库及其包含的所有对象
DROP DATABASE day15;

第3步:进入数据库与创建表

操作前需切换至目标数据库上下文。建表时需注意字段名称的唯一性及数据类型合理性。

-- 切换并使用目标数据库
USE day15;

-- 查看所有表验证环境
SHOW TABLES;

-- 创建学生表
CREATE TABLE student(
 id INT,
 NAME VARCHAR(20),
 gender VARCHAR(2),
 age INT
);

-- 查看表结构与字段详情
DESC student;

-- 删除指定表
DROP TABLE student;

数据维护:增删改查(CRUD)

数据维护是日常开发最高频的操作。建议始终带上条件执行更新或删除,防止误操作全表数据。

第4步:插入数据(Insert)

插入时需保证值的顺序与数量与定义一致。若未指定所有字段,MySQL 会为未指定字段赋予默认值或 NULL。

-- 方式一:插入所有字段值(必须按顺序)
INSERT INTO student VALUES(1,'张三','男',20);

-- 方式二:仅插入指定字段(推荐,更安全)
INSERT INTO student(id,NAME) VALUES(2,'李四');

第5步:修改数据(Update)

不带 WHERE 子句的更新会覆盖表中所有记录,生产环境中严禁使用。修改多个字段时使用逗号分隔。

-- 【危险】无条件修改所有行的性别(极少使用)
UPDATE student SET gender='女';

-- 推荐:带精确条件的修改
UPDATE student SET gender='男' WHERE id=1;

-- 批量修改多个字段
UPDATE student SET gender='男',age=30 WHERE id=2;

第6步:删除数据(Delete vs Truncate)

理解 DELETE 与 TRUNCATE 的区别至关重要:DELETE 支持条件过滤且可回滚(属于DML操作);TRUNCATE 用于清空全表且重置自增ID(属于DDL操作),速度更快但无法恢复。

-- 方式一:条件删除(安全,支持回滚)
DELETE FROM student WHERE id=2;

-- 方式二:清空全表并重置标识(谨慎使用)
TRUNCATE TABLE student;

第7步:查询数据(Select)

查询是灵活度最高的部分,涉及别名、常量列、去重、条件过滤及聚合统计。

-- 基础查询:指定列与别名
SELECT id AS '编号',NAME AS '姓名' FROM student;

-- 合并数值列计算(如总成绩)
SELECT id,(servlet+jsp) AS '总成绩' FROM student;

-- 去除重复记录
SELECT DISTINCT gender FROM student;

-- 常见聚合函数:求和、平均、最大/最小、计数
SELECT SUM(servlet) AS '总分', AVG(jsp) AS '平均分', COUNT(*) AS '人数'
FROM student;
-- 注意:COUNT(field) 会忽略 NULL 值,统计行数推荐使用 COUNT(*) 或非空主键

第8步:高级筛选与排序

利用 BETWEEN、LIKE 进行范围与模糊匹配;注意区分 NULL 与空字符串的处理逻辑。

-- 范围查询:包前包后
SELECT * FROM student WHERE jsp BETWEEN 75 AND 90;

-- 判空处理:NULL 用 IS NULL,空字符串用 =' '
SELECT * FROM student WHERE address IS NULL OR address='';

-- 模糊查询:%代表任意字符,_代表单个字符
SELECT * FROM student WHERE NAME LIKE '张%';

-- 多条件排序:支持正序(ASC)与倒序(DESC)
SELECT * FROM student ORDER BY servlet ASC, jsp DESC;

第9步:分页查询(Limit)

分页公式为 LIMIT (当前页-1)*每页条数, 每页条数。注意第一页的索引从0开始。

-- 第1页(显示第1、2条数据)
SELECT * FROM student LIMIT 0,2;
-- 第2页(显示第3、4条数据)
SELECT * FROM student LIMIT 2,2;

数据完整性与高级特性

合理的数据约束能保障业务逻辑的严谨性,而存储过程和触发器则用于封装复杂的数据库端逻辑。

第10步:实施数据约束

在建表阶段通过关键字设定字段行为,防止脏数据录入。

-- 允许为空,但有默认值
address VARCHAR(20) DEFAULT '广州天河'
-- 强制非空
gender VARCHAR(2) NOT NULL
-- 唯一约束
id INT UNIQUE
-- 主键约束(唯一+非空)
id INT PRIMARY KEY AUTO_INCREMENT -- 配合自增长使用

第11步:外键关联(Foreign Key)

外键用于维护多表间的一致性。操作顺序需严格遵循:先操作从表(子表),再操作主表(父表)。可结合 CASCADE 实现级联更新或删除。

-- 声明外键约束
CONSTRAINT employee_dept_fk 
FOREIGN KEY(deptId) REFERENCES dept(id) 
ON UPDATE CASCADE ON DELETE CASCADE;

第12步:多表联合查询

内连接只返回匹配成功的行;左连接保留左表所有行,右连接保留右表所有行。

-- 内连接写法
SELECT e.empName, d.deptName
FROM employee e INNER JOIN dept d
ON e.deptId = d.id;

-- 左外连接:即使部门下没有员工也会显示null
SELECT d.deptName, e.empName
FROM dept d LEFT OUTER JOIN employee e
ON d.id = e.deptId;

第13步:存储过程与变量

使用 DELIMITER 改变结束符以避免冲突。变量分为全局变量、会话变量和局部变量,注意生命周期差异。

-- 声明结束符并创建简单存储过程
DELIMITER $
CREATE PROCEDURE pro_test()
BEGIN
 SELECT * FROM employee;
END $
CALL pro_test();
DELIMITER ;

第14步:触发器自动日志记录

触发器随表数据的增、删、改自动执行,常用于审计或状态同步。

-- 每次插入新记录时,自动向日志表写入时间戳
CREATE TRIGGER tri_empAdd AFTER INSERT ON employee 
FOR EACH ROW 
INSERT INTO test_log(content) VALUES('新增了一条员工记录');
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。