Chapter 4

MySQL 数据库基础

从数据库操作到 Python 实战 —— 掌握数据增删改查的完整链路,理解 ORM 编程思想

4.1

MySQL 概述

🐬什么是 MySQL?

MySQL 是全球最流行的开源关系型数据库管理系统(RDBMS),由 Oracle 公司维护。它使用 SQL(结构化查询语言)来管理数据。

想象你有一个超大号的 Excel 文件柜:MySQL 就是管理这个文件柜的管理员。它能帮你快速找到某一行数据,能同时服务上千个人查阅,还能确保数据不会丢失或出错。
💪

功能强大

支持事务、索引、存储过程等高级特性

🖥️

跨平台

Windows、Linux、macOS 均可运行

速度快

经过优化的查询引擎,毫秒级响应

💰

成本低

开源免费,社区版足够学习和中小项目使用

🌐

多语言支持

Python、Java、PHP、Node.js 等均可操作

📦

大容量

单表可存储数十亿条记录

4.2

下载安装 MySQL

📥安装流程

下载安装包
mysql.com
运行安装程序
选择 Server Only
设置环境变量
Path 添加 bin
启动服务
net start mysql
推荐版本:MySQL 5.7(稳定)或 MySQL 8.0(最新)。本章内容两个版本通用。
CMD 命令
# 启动 MySQL 服务
net start mysql

# 关闭 MySQL 服务
net stop mysql

# 登录 MySQL
mysql -u root -p
4.3

操作 MySQL 数据库

🗄️数据库的 CRUD 操作

数据库就像文件夹,数据表就像文件夹里的Excel 表格。要操作表格前,你得先创建或打开一个文件夹。
SQL
-- 创建数据库
CREATE DATABASE mydb;

-- 选择/使用数据库
USE mydb;

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

-- 删除数据库(⚠️ 不可恢复!)
DROP DATABASE mydb;
DROP DATABASE 操作会永久删除数据库及其所有数据,执行前请务必确认!生产环境中应先做备份。
4.4

MySQL 数据类型

🔢数字类型 — 整数

不同的整数类型就像不同大小的容器:TINYINT 是茶杯(装一点),INT 是水桶(日常够用),BIGINT 是水塔(超大容量)。选择合适的类型既节省空间又满足需求。
类型大小有符号范围适用场景
TINYINT1 字节-128 ~ 127状态码、布尔值
SMALLINT2 字节-32768 ~ 32767年龄、小计数
INT4 字节-21亿 ~ 21亿⭐ 最常用,用户ID等
BIGINT8 字节极大范围订单号、大数据量ID

📝字符串类型

CHAR(10) 就像一个固定10格的停车场,不管停几辆车,都占10个位。VARCHAR(10) 则像弹性车位,停多少辆占多少位(但最多10个)。
类型长度特点适用场景
CHAR(M)0~255固定长度,读取快身份证号、手机号
VARCHAR(M)0~65535可变长度,节省空间⭐ 用户名、邮箱
TEXT~64KB大段文本文章内容、评论
LONGTEXT~4GB超大文本日志、全文内容

📅日期和时间类型

类型格式范围适用场景
DATEYYYY-MM-DD1000~9999年生日、入职日期
TIMEHH:MM:SS±838小时时长记录
DATETIMEYYYY-MM-DD HH:MM:SS1000~9999年⭐ 创建时间、更新时间
TIMESTAMPYYYY-MM-DD HH:MM:SS1970~2038年自动记录修改时间
DATETIME vs TIMESTAMP:DATETIME 存的是"绝对时间",不受时区影响;TIMESTAMP 会根据服务器时区自动转换。一般推荐用 DATETIME。
4.5

操作数据表

📋创建数据表

SQL
CREATE TABLE tb_users (
    id        INT          PRIMARY KEY  AUTO_INCREMENT,
    username  VARCHAR(50)  NOT NULL,
    email     VARCHAR(100),
    age       TINYINT      DEFAULT 0,
    createtime DATETIME    DEFAULT CURRENT_TIMESTAMP
);

常用列属性

PRIMARY KEY主键,唯一标识每行
AUTO_INCREMENT自动递增编号
NOT NULL不允许为空
DEFAULT设置默认值

查看 / 修改 / 删除

SQL
-- 查看表结构
DESC tb_users;

-- 添加列
ALTER TABLE tb_users
  ADD phone VARCHAR(20);

-- 删除表
DROP TABLE tb_users;
PRIMARY KEY 就像每个学生的学号——全校唯一,不能重复,也不能为空。AUTO_INCREMENT 就是让学号自动排号,入学一个编一个。
4.6

数据表记录的增删改查

✏️SQL 四大操作

SQL — 增删改查
-- ① 增(INSERT):插入一条记录
INSERT INTO tb_users (username, email, age)
VALUES ('张三', 'zhangsan@email.com', 22);

-- ② 查(SELECT):查询所有记录
SELECT * FROM tb_users;

-- 查询特定条件
SELECT username, age FROM tb_users WHERE age > 20;

-- ③ 改(UPDATE):修改记录
UPDATE tb_users SET age = 23 WHERE username = '张三';

-- ④ 删(DELETE):删除记录
DELETE FROM tb_users WHERE id = 1;
UPDATEDELETE 操作一定要带 WHERE 条件!否则会修改/删除所有记录。这是初学者最常犯的错误。
4.7

查询操作进阶

🔍WHERE 子句常用运算符

运算符示例
= > < >= <=age >= 18
!=<>status != 0
BETWEEN...ANDid BETWEEN 1 AND 10
INid IN (4, 5, 6)
LIKEname LIKE '张%'
IS NULLemail IS NULL
统计函数功能
COUNT(*)统计行数
SUM(字段)求和
AVG(字段)平均值
MAX(字段)最大值
MIN(字段)最小值
LIKE '张%' 就像在通讯录里搜索"姓张的人"——% 是万能通配符,代表任意多个字符。_(下划线)则代表恰好一个字符。
⭐ 4.8

使用 Python 操作 MySQL — 本章核心

📦第一步:安装 PyMySQL

PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,无需额外的 C 依赖。

Terminal
pip install pymysql

🔄Python 操作数据库的完整流程

① 建立连接
connect()
② 获取游标
cursor()
③ 执行SQL
execute()
④ 提交事务
commit()
⑤ 关闭连接
close()
想象你去银行办业务
connect() = 走进银行,拿号排队
cursor() = 走到柜台窗口,面对工作人员
execute() = 告诉工作人员你要办什么业务
commit() = 确认办理,签字盖章
close() = 办完走人,离开银行

🔌连接对象 & 游标对象

连接对象方法

cursor()获取游标对象
commit()提交事务
rollback()回滚事务
close()关闭连接

游标对象方法

execute(sql)执行一条SQL
executemany()批量执行
fetchone()取一条结果
fetchmany(n)取 n 条结果
fetchall()取全部结果
游标(cursor)就像是数据表上的一根"手指":你用它指向某一行数据,可以一行行往下读(fetchone),也可以一把抓完(fetchall)。

🐍PyMySQL 完整代码示例

🔗 建立数据库连接

Python
import pymysql

# 建立数据库连接
db = pymysql.connect(
    host='localhost',      # 数据库地址
    user='root',           # 用户名
    password='123456',     # 密码
    database='mydb',       # 数据库名
    charset='utf8mb4'      # 字符编码(推荐utf8mb4)
)

# 获取游标对象
cursor = db.cursor()

➕ 插入数据(INSERT)

Python — INSERT
# 方式1:直接拼接(⚠️ 有SQL注入风险,仅学习用)
sql = "INSERT INTO books (name, price) VALUES ('Python入门', 59.9)"
cursor.execute(sql)

# 方式2:参数化查询(✅ 推荐!安全防注入)
sql = "INSERT INTO books (name, price) VALUES (%s, %s)"
cursor.execute(sql, ('Flask实战', 69.8))

# 批量插入
data = [
    ('Django教程', 79.0),
    ('MySQL必知必会', 49.5),
    ('数据分析实战', 89.0)
]
cursor.executemany(sql, data)

db.commit()  # ⚠️ 别忘了提交!

🔍 查询数据(SELECT)

Python — SELECT
# 查询所有记录
cursor.execute("SELECT * FROM books")
results = cursor.fetchall()

for row in results:
    print(f"书名: {row[1]}, 价格: {row[2]}")

# 查询单条记录
cursor.execute("SELECT * FROM books WHERE id = %s", (1,))
book = cursor.fetchone()
print(book)  # 返回元组: (1, 'Python入门', 59.9)

# 条件查询
cursor.execute("SELECT name, price FROM books WHERE price > %s", (60,))
expensive = cursor.fetchall()

✏️ 修改数据(UPDATE)

Python — UPDATE
sql = "UPDATE books SET price = %s WHERE name = %s"
cursor.execute(sql, (55.0, 'Python入门'))
db.commit()

print(f"受影响的行数: {cursor.rowcount}")

🗑️ 删除数据(DELETE)

Python — DELETE
sql = "DELETE FROM books WHERE id = %s"
cursor.execute(sql, (3,))
db.commit()

🛡️ 完整的异常处理模板

Python — 最佳实践
import pymysql

db = pymysql.connect(
    host='localhost', user='root',
    password='123456', database='mydb',
    charset='utf8mb4'
)

try:
    cursor = db.cursor()
    
    # 执行你的 SQL 操作
    cursor.execute("INSERT INTO books (name, price) VALUES (%s, %s)",
                   ('新书', 99.0))
    
    db.commit()       # 成功则提交
    print("操作成功!")

except Exception as e:
    db.rollback()     # 出错则回滚,撤销所有更改
    print(f"操作失败: {e}")

finally:
    cursor.close()    # 关闭游标
    db.close()        # 关闭连接
这个 try → commit / except → rollback / finally → close 结构是操作数据库的黄金模板,务必牢记!它能保证:操作成功时数据持久化,失败时数据不会处于半更新状态。
4.9

ORM 编程

🔄什么是 ORM?

对象关系映射(Object Relational Mapping)—— 让你用 Python 对象的方式操作数据库,而不用写 SQL 语句。

ORM 就像一个翻译官:你说中文(Python 对象),数据库说英语(SQL),ORM 帮你自动翻译。你只需要告诉它"帮我创建一个用户",它会自动翻译成 INSERT INTO users...

数据库概念

📁 数据表 (Table)
📝 数据行 (Record)
📌 字段 (Field)


Python 概念

🏗️ 类 (Class)
📦 对象 (Object)
🏷️ 属性 (Attribute)
Python — ORM 示例(SQLAlchemy 风格)
# 传统 SQL 写法
cursor.execute("INSERT INTO users (name, age) VALUES ('李四', 25)")

# ORM 写法 —— 像操作普通 Python 对象一样!
user = User(name='李四', age=25)
session.add(user)
session.commit()

✅ ORM 优点

• 数据模型集中管理,便于维护
• 自动处理数据消毒和事务
• 天然的 MVC 架构(Model 层)
• 代码简洁,语义清晰
• 不用手写复杂 SQL

❌ ORM 缺点

• 学习成本较高
• 复杂查询性能不如原生 SQL
• 抽象了底层,不利于理解 SQL 原理
• 对非标准操作支持有限

常用 ORM 库:SQLAlchemy(功能最全)、Peewee(轻量好上手)、Django 内置 ORM。后续学习 Web 框架时会深入使用。
4.10

本章小结

🎯知识脉络回顾

Part 1
MySQL 基础
安装 · 数据库 · 数据表
Part 2
SQL 语句
增删改查 · 查询进阶
Part 3
Python + MySQL
PyMySQL · CRUD
Part 4
ORM 思想
对象映射 · 框架准备

📌 必须记住的 SQL

CREATE DATABASE / TABLE
INSERT INTO ... VALUES
SELECT ... FROM ... WHERE
UPDATE ... SET ... WHERE
DELETE FROM ... WHERE

📌 必须记住的 Python 模板

pymysql.connect() → 连接
db.cursor() → 获取游标
cursor.execute(sql) → 执行
db.commit() → 提交
try/except/finally → 异常处理