MySQL初识和基础操作

1. 数据库和MySQL

数据库

数据库本质是一个长期保存业务数据的系统

后端服务里会产生这些数据:

  • 用户注册信息
  • 用户登录记录
  • 商品订单
  • 支付记录
  • AI 聊天历史
  • AI 调用日志
  • 用户余额
  • 模型调用 token 消耗
  • 文件上传记录

这些数据不能放到内存里,因为:

  • 程序重启,内存会丢
  • 多台服务器之间不能共享本地内存
  • 数据需要长期保存
  • 数据需要被高效查询、修改、统计
  • 数据需要保证一致性和可靠性

数据库就做到了后端系统的持久化保存

MySQL

而MySQL是一种具体的数据库管理系统,是一个服务端程序

image-20260426211138814

  • mysqld是数据库的服务端

  • mysql是数据库的客户端

  • mysql是一种典型的客户端/服务端架构,提供了一套数据存储服务的网络服务

    image-20260426211546297

再通俗讲,MySQL管理数据库,数据库存东西:

image-20260426212158353

表时数据库中组织数据的基本单元,可以把一张表想象成一个struct结构体,例如:

idusernameemailagecreated_at
1kunkunkunkun@example.com202026-05-07 10:00:00
2gegegege@example.com222026-05-07 10:05:00

一行就是一条具体的业务数据,对应着一个业务对象

image-20260507113122139

这一行表示一个用户的所有详细信息

列表示这类业务对象的某个具体属性,也叫字段

比如用户有这些属性:

  • id:用户 ID
  • username:用户名
  • email:邮箱
  • age:年龄
  • created_at:注册时间

2. 库的基本操作

数据库 database可以理解为一个业务项目的数据容器,里面可以有多张表

image-20260426212158353

还是这张图

比如:

MySQL 服务
  └── ai_backend 数据库
        ├── users 表
        ├── conversations 表
        ├── messages 表
        └── model_call_logs 表

可以对照到Linux的文件系统

/home/vect/ai_backend/
    users
    conversations
    messages

查看所有数据库

show databases;	# 类似ls命令

创建数据库

create database if not exists 数据库名 [选项];

如果不存在这个数据库就创建

字符集和编码集

  • 数据库编码集:数据库未来存储数据的编码格式
  • 数据库校验集:数据库读取时采用的编码格式

要保证操作时用的同一个编码格式

一般都是使用:

create database if not exists ai_backend
default character set utf8mb4
default collate utf8mb4_unicode_ci;

使用数据库

use 数据库名;

接下来就对这个数据库进行操作

查看当前正在使用哪个数据库

select database();

删除数据库

drop database if exists 数据库名;

注意:这是相当于rm -rf 目录,整个路径下的数据全部清空,一般不要删库

备份和恢复数据库

备份:

mysqldump -P3306 -u root -p 密码 -B 数据库名1 数据库名2... > 新的路径

直接把所有有效操作的命令备份了!

只备份一个库里的几个表:

mysqldump -P3306 -u root -p 密码 -B 数据库名 表一 表二... > 新的路径

还原:

source 备份的文件.sql

如果在备份时,没有-B的选项,恢复数据库时,要先创建空的数据库,然后使用这个数据库,再使用source还原

库操作小结

需求SQL
查看所有库show databases;
创建库create database if not exists 库名;
使用库use 库名;
查看当前库select database();
删除库drop database if exists 库名;

3. 表的基本操作

表是数据库里真正存业务数据的地方,建表就是把业务对象翻译成数据库结构,这也是面向对象的思想:

class User{
    long long _id;
    std::string _name;
    std::string _email;
    std::string _password;
}
create table users (
	id bigint primary key auto_increment,
    username varchar(50),
    email varchar(100),
    password varchar(255)
);

唯一的区别就是class类是内存中的结构,table表是磁盘上的持久化数据集合

查看当前数据库下的所有表

show tables;

创建表

create table if not exists 表名 (
	字段名 数据类型 约束,
    字段名 数据类型 约束,
    字段名 数据类型 约束
);

查看表结构

desc 表名;

查看建表语句

show create table 表名;

删除表

drop table if exists 表名;

drop是彻底删除整张表,结构和数据全没了

delete from 表名;

只是删除数据,表结构还在

修改表结构

添加字段

alter table users
add 新字段名 类型 约束;

修改字段类型

alter table 表名
modify 要修改的字段 新的类型;

修改字段名

alter table 表名
change 旧字段名 新字段名 新类型 新约束;

删除字段

alter table 表名
drop column 字段名;

删除字段会丢失这个字段里的所有数据

修改表名

rename table 旧表名 to 新表名;

或者:

alter table 旧表名 to 新表名;

done~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值