【MySQL】增删查改基础

CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)

先创建一张表:

mysql> create table if not exists stu(
    -> id int unsigned primary key auto_increment,
    -> sn int unsigned unique key comment '学号',
    -> name varchar(20) not null,
    -> qq varchar(20) unique key
    -> );

一、创建操作

1.1 单行插入

  • 指定列单行插入
mysql> insert into stu (sn, name, qq) values(123, '张三', '1161');
Query OK, 1 row affected (0.01 sec)
  • 单行全列插入
mysql> insert into stu values(2, 128, '李四', '7077');
Query OK, 1 row affected (0.00 sec)

into 可以省略。


mysql> select * from stu;
+----+------+--------+------+
| id | sn   | name   | qq   |
+----+------+--------+------+
|  1 |  123 | 张三   | 1161 |
|  2 |  128 | 李四   | 7077 |
+----+------+--------+------+
2 rows in set (0.00 sec)

1.2 多行插入

可以直接一行全列插入。

mysql> insert into stu values(10, 132, '王五', '2498'),(11, 147, '赵六', '8088');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from stu;
+----+------+--------+------+
| id | sn   | name   | qq   |
+----+------+--------+------+
|  1 |  123 | 张三   | 1161 |
|  2 |  128 | 李四   | 7077 |
| 10 |  132 | 王五   | 2498 |
| 11 |  147 | 赵六   | 8088 |
+----+------+--------+------+
4 rows in set (0.00 sec)

也可以指定行插入一列:

mysql> insert into stu (sn, name, qq) values(155, '刘备', '5279'),(452, '关羽', '7892');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 
mysql> select * from stu;
+----+------+--------+------+
| id | sn   | name   | qq   |
+----+------+--------+------+
|  1 |  123 | 张三   | 1161 |
|  2 |  128 | 李四   | 7077 |
| 10 |  132 | 王五   | 2498 |
| 11 |  147 | 赵六   | 8088 |
| 14 |  155 | 刘备   | 5279 |
| 15 |  452 | 关羽   | 7892 |
+----+------+--------+------+
6 rows in set (0.00 sec)

1.3 插入否则替换更新

对数据进行插入,首先数据要合法(相关字段没有被唯一键、主键、外键等进行约束),其次如果插入数据的id已存在,将会更新sn、name和qq而不是插入失败。

mysql> insert into stu values (15, 452, '张飞', '7892') on duplicate key update sn=452, name='张飞', qq='7892';
Query OK, 2 rows affected (0.00 sec)
mysql> select * from stu;
+----+------+--------+------+
| id | sn   | name   | qq   |
+----+------+--------+------+
|  1 |  123 | 张三   | 1161 |
|  2 |  128 | 李四   | 7077 |
| 10 |  132 | 王五   | 2498 |
| 11 |  147 | 赵六   | 8088 |
| 14 |  155 | 刘备   | 5279 |
| 15 |  452 | 张飞   | 7892 |
+----+------+--------+------+
6 rows in set (0.00 sec)

1.4 替换replace

主键 或者 唯一键 没有冲突,则直接插入;
主键 或者 唯一键 如果冲突,则删除后再插入。

mysql> select * from stu;
+----+------+--------+------+
| id | sn   | name   | qq   |
+----+------+--------+------+
|  1 |  123 | 张三   | 1161 |
|  2 |  128 | 李四   | 7077 |
| 10 |  132 | 王五   | 2498 |
| 11 |  147 | 赵六   | 8088 |
| 14 |  155 | 刘备   | 5279 |
| 15 |  452 | 张飞   | 7892 |
+----+------+--------+------+
6 rows in set (0.00 sec)

mysql> replace into stu (sn, name, qq) values (258, '曹操', 5687);
Query OK, 1 row affected (0.01 sec)

mysql> select * from stu;
+----+------+--------+------+
| id | sn   | name   | qq   |
+----+------+--------+------+
|  1 |  123 | 张三   | 1161 |
|  2 |  128 | 李四   | 7077 |
| 10 |  132 | 王五   | 2498 |
| 11 |  147 | 赵六   | 8088 |
| 14 |  155 | 刘备   | 5279 |
| 15 |  452 | 张飞   | 7892 |
| 16 |  258 | 曹操   | 5687 |
+----+------+--------+------+
7 rows in set (0.00 sec)

在这里插入图片描述
通过id也可以看出这行数据是先删除在插入的。

二、查询操作

先创建一个期末成绩表:

mysql> create table exam_result(
    -> id int unsigned primary key auto_increment,
    -> name varchar(20) not null comment '学生姓名',
    -> chinese float default 0.0 comment '语文成绩',
    -> math float default 0.0 comment '数学成绩',
    -> english 
在使用 Flask 框架进行开发时,我们通常会使用 ORM 工具来进行数据库操作。常用的 ORM 工具有 SQLAlchemy 和 Peewee。这里以 SQLAlchemy 为例,介绍如何封装 MySQL增删查改操作。 首先,我们需要在 Flask 中初始化 SQLAlchemy: ```python from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://user:password@host/db_name' db = SQLAlchemy(app) ``` 接下来,我们可以定义一个基础的 Model 类,所有的数据模型都继承自它: ```python class BaseModel(db.Model): __abstract__ = True id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) ``` 这里的 BaseModel 类定义了一个 id 字段和两个时间戳字段,所有的数据模型都会继承这些字段。 接着,我们可以定义一个封装了增删查改操作的基础 Repository 类: ```python class BaseRepository: model = None @classmethod def add(cls, data): db.session.add(data) db.session.commit() @classmethod def delete(cls, data): db.session.delete(data) db.session.commit() @classmethod def find(cls, **kwargs): return cls.model.query.filter_by(**kwargs).first() @classmethod def find_all(cls, **kwargs): return cls.model.query.filter_by(**kwargs).all() @classmethod def update(cls, data): db.session.commit() ``` 这里的 BaseRepository 类定义了 add、delete、find、find_all 和 update 五个方法,别对应了增、删、查、查全部和改操作。这些方法都是基于 SQLAlchemy 提供的 API 进行封装的。 最后,我们可以定义一个具体的 Repository 类,继承自 BaseRepository,并指定对应的 model: ```python class UserRepository(BaseRepository): model = User ``` 这里的 UserRepository 类继承了 BaseRepository 类,并指定了 model 为 User。这样,我们就可以通过 UserRepository 类来进行 User 数据模型的增删查改操作了。 ```python user = User(name='John') UserRepository.add(user) user = UserRepository.find(name='John') user.name = 'Tom' UserRepository.update(user) UserRepository.delete(user) users = UserRepository.find_all() ``` 以上就是一个简单的 MySQL 增删查改操作的封装示例。在实际开发中,我们可以根据具体的需求对 Repository 类进行拓展,并且可以结合 Flask 的 Blueprint 等功能来进行模块化的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命由己造~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值