MySQL初识和基础操作

文章目录

1. 数据库和MySQL

数据库

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

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

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

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

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

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

MySQL

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

  • mysqld是数据库的服务端

  • mysql是数据库的客户端

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

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

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

id username email age created_at
1 kunkun kunkun@example.com 20 2026-05-07 10:00:00
2 gege gege@example.com 22 2026-05-07 10:05:00

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

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

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

比如用户有这些属性:

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

2. 库的基本操作

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

还是这张图

比如:

txt 复制代码
MySQL 服务
  └── ai_backend 数据库
        ├── users 表
        ├── conversations 表
        ├── messages 表
        └── model_call_logs 表

可以对照到Linux的文件系统

text 复制代码
/home/vect/ai_backend/
    users
    conversations
    messages

查看所有数据库

sql 复制代码
show databases;	# 类似ls命令

创建数据库

sql 复制代码
create database if not exists 数据库名 [选项];

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

字符集和编码集

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

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

一般都是使用:

sql 复制代码
create database if not exists ai_backend
default character set utf8mb4
default collate utf8mb4_unicode_ci;

使用数据库

sql 复制代码
use 数据库名;

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

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

sql 复制代码
select database();

删除数据库

sql 复制代码
drop database if exists 数据库名;

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

备份和恢复数据库

备份:

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

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

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

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

还原:

sql 复制代码
source 备份的文件.sql

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

库操作小结

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

3. 表的基本操作

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

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

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

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

sql 复制代码
show tables;

创建表

sql 复制代码
create table if not exists 表名 (
	字段名 数据类型 约束,
    字段名 数据类型 约束,
    字段名 数据类型 约束
);

查看表结构

sql 复制代码
desc 表名;

查看建表语句

sql 复制代码
show create table 表名;

删除表

sql 复制代码
drop table if exists 表名;

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

sql 复制代码
delete from 表名;

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

修改表结构

添加字段

sql 复制代码
alter table users
add 新字段名 类型 约束;

修改字段类型

sql 复制代码
alter table 表名
modify 要修改的字段 新的类型;

修改字段名

sql 复制代码
alter table 表名
change 旧字段名 新字段名 新类型 新约束;

删除字段

sql 复制代码
alter table 表名
drop column 字段名;

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

修改表名

sql 复制代码
rename table 旧表名 to 新表名;

或者:

sql 复制代码
alter table 旧表名 to 新表名;

done~

相关推荐
Andya_net17 小时前
MySQL | DBeaver Mac版下载、安装与使用指南
数据库·mysql·macos
techdashen17 小时前
Agent 的第三次浪潮:Cloudflare Project Think 是什么,要解决什么问题
jvm·数据库·oracle
草莓熊Lotso19 小时前
【Linux网络】UDP Socket 编程全解析:从回显服务到通用字典服务,从零实现工业级代码
linux·运维·服务器·数据库·c++·单片机·udp
woxihuan1234561 天前
SQL删除数据时存在依赖关系_设置外键级联删除ON DELETE
jvm·数据库·python
东风破1371 天前
DM8达梦共享存储集群DSC搭建步骤
数据库·学习·dm达梦数据库
雪碧聊技术1 天前
当数据库字段数大于Java实体类属性数时,MyBatis还能映射成功吗?一文详解
数据库·自动映射·mybatis映射机制·java实体类·宽容映射机制
Jetev1 天前
如何确定SQL字段是否为空_使用IS NULL与IS NOT NULL
jvm·数据库·python
m0_702036531 天前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
代钦塔拉1 天前
Qt4 vs Qt5 带参数信号槽的连接方式详解
开发语言·数据库·qt
2401_846339561 天前
MySQL在云环境如何选择存储类型_SSD与高性能云盘配置建议
jvm·数据库·python