MySQL 增删改查(CRUD)详解 + Python pymysql实操
适配CSDN Markdown,直接全选复制粘贴即可,无特殊样式,代码块、表格正常识别
前言
CRUD 是数据库最核心的四个操作:新增(Create)、查询(Read)、修改(Update)、删除(Delete)。不管是后端开发、期末数据库考试,还是写 Python 项目,这都是基本功。很多新手容易踩 UPDATE、DELETE 忘记 WHERE 条件、忘记事务提交、SQL 注入这些坑,本文从原生 SQL 讲到 Python 代码实操。
环境说明:MySQL 8.0,使用 pymysql 库。
一、准备测试表
先建一张学生表,后面所有 SQL 都基于这张表测试
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键id',
name VARCHAR(20) NOT NULL COMMENT '姓名',
age TINYINT COMMENT '年龄',
score INT COMMENT '分数',
is_delete TINYINT DEFAULT 0 COMMENT '0正常 1逻辑删除'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
二、查询 Read(SELECT)
查询是使用最多的操作,读取表里面的数据。
基础语法:
— 查询全部字段
SELECT * FROM student;
— 查询指定字段(推荐,不要直接用*)
SELECT id,name,score FROM student;
— 带条件查询
SELECT * FROM student WHERE age >= 18;
— 模糊查询
SELECT * FROM student WHERE name LIKE '张%';
— 排序 order by
SELECT * FROM student ORDER BY score DESC;
— 分页 limit
SELECT * FROM student LIMIT 0,5;
— 分组 + having
SELECT age,COUNT(*) num FROM student GROUP BY age HAVING COUNT(*) > 1;
💡 踩坑点:WHERE 过滤原始数据,HAVING 过滤分组之后的结果;GROUP BY后面的字段,select里一般只能放分组字段和聚合函数。
三、新增 Create(INSERT)
往表里插入数据据
— 单条插入
INSERT INTO student(name,age,score) VALUES ('张三',19,88);
— 批量插入(效率更高)
INSERT INTO student(name,age,score)
VALUES
('李四',20,76),
('王五',19,92);
```> 💡 踩坑点:主键设置 AUTO_INCREMENT 自增,插入的时候不用给 id 传值;字符类型数据必须加单引号。号。
## 四、修改 Update(UPDATE修改已经存在的数据。数据
```sql
— 修改单个字段
UPDATE student SET score = 90 WHERE id = 1;
— 修改多个字UPDATE student SET age = 20, score = 85 WHERE name = '张三';';
⚠️【重中之重】UPDATE 如果不加 WHERE 条件,整张表所有行全部被修改,线上库属于重大事故!
建议习先写 SELECT 核对 WHERE 条件条件,确认是要改的数再改成 UPDATE。E。## 五、删除 Delete (DELETE)E)
— 物理删除,删掉这一行真实数据
DELETE FROM student WHERE id = 2;
三个删除语句对比(考试高频考点)
|语句|作用|能不能带where|自增主键|事务可回滚|
| —- | —- | —- | —- | —- | DELETE | 删除行数据 | ✅ 支持 | 保留,不会重置 | ✅ 可以回滚 |滚| TRUNCATE | 清空整张表 | ❌ 不能 | 重置从 1 开始 | ❌ 不支持回滚 |滚| DROP | 直接删掉整个表结构 | ❌ 不能 | 表直接消失 | ❌ 不支持回滚 |滚|> 💡 业务常用方案:逻辑删除(软删除),不执行 DELETE。
更新 is_delete=1 代表删除,查询的时候带上 WHERE is_delete=0=0`
— 逻辑删除
UPDATE student SET is_delete=1 WHERE id=3;
— 查询有效数据
SELECT * FROM student WHERE is_delete=0;
六、Python pymysql 连接数据库实现CRUD
1、先安装依赖
pip install pymysql
`### 2、封装工具类 db.py(考试 + 项目通用模板)模板)
```python
import pymysql
class MySQLHelper:
def __init__(self, host='localhost', user='root', password='123456', database='test_db'):
# 建立数据库连接
self.conn = pymysql.connect(
host=host,
user=user,
password=password,
database=database,
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
# 查询多条
def query_all(self, sql, params=None):
params = params or ()
with self.conn.cursor() as cur:
cur.execute(sql, params)
return cur.fetchall()
# 查询单条
def query_one(self, sql, params=None):
params = params or ()
with self.conn.cursor() as cur:
cur.execute(sql, params)
return cur.fetchone()
# 增、改、删统一方法
def execute_sql(self, sql, params=None):
params = params or ()
with self.conn.cursor() as cur:
cur.execute(sql, params)
self.conn.commit() # DML操作必须提交事务
return cur.rowcount
# 关闭连接
def close(self):
self.conn.close()
# 测试调用
if __name__ == '__main__':
db = MySQLHelper(password="你的数据库密码", database="student")
# 新增
# sql = "INSERT INTO student(name,age,score) VALUES (%s,%s,%s)"
# db.execute_sql(sql, ("小明",18,80))
# 修改
# sql = "UPDATE student SET score=%s WHERE id=%s"
# db.execute_sql(sql, (86, 1))
# 删除
# sql = "DELETE FROM student WHERE id=%s"
# db.execute_sql(sql, (1,))
# 查询
res = db.query_all("SELECT * FROM student WHERE is_delete=0")
print(res)
db.close()
💡 > 1. %s 是占位符,不是字符串拼接!用来防止 SQL 注入,绝对不要用 f-string 拼接 SQL 语句语句**
2. insert/update/delete 执行完必须 commit() 提交事务,否则数据库数据不会变化
3. with 管理游标,自动关闭游标,不用手动写 cur.close()
七、高频易1. DQL(select)不用 commit;DML(insert/update/delete)需要 commitm2. update、delete 一定要加 where 条件r3. 模糊查询 % 匹配任意字符,_ 匹配单个字符单4. 外键约束保证参照完整性,主键唯一非空,唯一约束允许一个 nulln5. 事务 ACID:原子性、一致性、隔离性、持久性、持久性
八CRUD 看着简单,但是细节坑非常多。熟练掌握原生 SQL,再搭配 Python 封装工具类,工具类,不管是数据库期末考试、后端开发写接口,都够用了。后续可以继续学习索引、事务、锁、联表查询这些进阶内容。
标签:MySQL CRUD pymysql 数据库增删改查 Python操作数据库
网硕互联帮助中心



评论前必须登录!
注册