1:MySQL库操作
我们可以把数据库理解成一个系统文件夹,他是MySQL数据存储的顶层容器,同来存放后续所有的数据表。
1:创建数据库
核心语法
sql
CREATE DATABASE [IF NOT EXISTS] 数据库名
[DEFAULT] CHARACTER SET 字符集名
[DEFAULT] COLLATE 校验规则名;
语法拆解
CREATE DATABASE:创建数据库的固定关键字,规范写法建议大写(MySQL 不强制大小写,但行业通用规范)[IF NOT EXISTS]:新手必加的可选参数,只有数据库不存在时才会创建,避免重复创建报错- 数据库名:自定义名称,禁止用 MySQL 关键字(如
create/database),如果非要用,必须用反引号`````包裹 CHARACTER SET:指定字符集,常用utf8(支持中文),不指定则使用系统默认值COLLATE:指定字符集的校验规则,控制大小写是否敏感、排序规则,不指定则使用系统默认值
1:最简创建(使用默认字符集和效验规则)
sql
create database if not exists db1;
2:指定utf8字符集创建(避免中文乱码,推荐写法)
sql
create database if not exists db2 charset=utf8;
3:同时指定字符集+效验规则创建
sql
create database if not exists db3 charset=utf8 collate utf8_general_ci;
2:字符集与效验规则
这是决定数据库能否正常存中文,查询是否区分大小写的核心配置
1:查看默认配置
sql
-- 查看系统默认字符集
show variables like 'character_set_database';
-- 查看系统默认校验规则
show variables like 'collation_database';

2:查看MySQL支持的配置
sql
-- 查看所有支持的字符集
show charset;
-- 查看所有支持的校验规则
show collation;
太长了我就不截图演示了
3:效验规则的核心影响
校验规则最核心的区别,就是大小写是否敏感,我们用两个案例直观感受:
案例1:不区分大小写(utf8_general_ci)
sql
-- 创建数据库,指定不区分大小写的校验规则
create database if not exists test1 collate utf8_general_ci;
-- 进入数据库
use test1;
-- 创建测试表
create table person(name varchar(20));
-- 插入测试数据
insert into person values('a'),('A'),('b'),('B');
-- 查询name='a',会返回a和A两条数据
select * from person where name='a';

案例2:区分大小写(utf8_bin)
bin是二进制效验,严格区分大小写
sql
-- 创建数据库,指定区分大小写的校验规则
create database if not exists test2 collate utf8_bin;
-- 进入数据库
use test2;
-- 创建测试表
create table person(name varchar(20));
-- 插入测试数据
insert into person values('a'),('A'),('b'),('B');
-- 查询name='a',只会返回a一条数据
select * from person where name='a';

3:查看数据库
1:查看MySQL中所有的数据库
sql
show databases;
2:查看某个数据库的完整创建语句(可以核对字符集,效验规则)
sql
show create database test1;
返回结果说明:

- 数据库名的反引号`````:防止名称和关键字冲突
/*!40100 ... */:不是注释,是版本兼容语句,MySQL 版本大于 4.01 就会执行里面的内容
4:修改数据库
仅支持修改数据库的字符集和校验规则,修改不会影响已存在的表,只对后续新建的表生效
sql
ALTER DATABASE 数据库名
[DEFAULT] CHARACTER SET 新字符集
[DEFAULT] COLLATE 新校验规则;
实操
sql
-- 将db1的字符集修改为gbk
alter database db1 charset=gbk;
-- 核对修改结果
show create database db1;

5:删除数据库
sql
DROP DATABASE [IF EXISTS] 数据库名;
实操

致命警告
删除数据库会级联删除里面所有的表、所有数据,对应的数据库文件夹会直接被删除,数据无法恢复!
- 测试环境操作前一定要确认库名
- 生产环境绝对禁止直接执行 drop 语句
6:数据库的备份和恢复
删库跑路的唯一补救方案,就是提前备份,这里只讲最基础、最常用的备份方式。
注意:备份操作在系统终端执行,不是在 mysql > 环境内;恢复操作在 mysql > 环境内执行。
1:备份整个数据库
bash
# 语法:mysqldump -P3306 -u 用户名 -p 密码 -B 数据库名 > 备份文件全路径.sql
# 示例:将mytest库备份到D盘的mytest.sql文件
mysqldump -P3306 -u root -p 123456 -B mytest > D:/mytest.sql
-B参数:会把创建数据库的语句一起备份,恢复时无需手动建库- 密码和 - p 之间不要有空格,否则会报错
2:其他备份场景
bash
# 备份单张/多张表
mysqldump -u root -p 数据库名 表名1 表名2 > D:/table_backup.sql
# 同时备份多个数据库
mysqldump -u root -p -B 数据库1 数据库2 > D:/multi_db_backup.sql
3:恢复数据库
bash
-- 语法:source 备份文件全路径.sql
-- 示例:恢复D盘的mytest.sql备份
source D:/mytest.sql;
注意:如果备份时没有加-B参数,恢复前必须先手动创建空数据库,再用use 数据库名进入库,再执行 source 语句。
7:查看数据库连接情况
sql
show processlist;
这个命令可以查看当前所有连接到 MySQL 的用户,包括连接 IP、执行的命令、运行时长,用来排查数据库卡顿、是否被非法入侵,非常实用。
2:MySQL表的操作
数据表是数据库里真正存放数据的地方,就像 Excel 里的工作表,由行(一条一条的记录)和列(字段)组成,每个字段都有对应的数据类型。
核心注意:操作表之前,必须先执行
use 数据库名;进入对应的数据库,否则会报错 "表不存在"。
1:创建表
sql
CREATE TABLE 表名 (
字段1名 数据类型 [comment '字段注释'],
字段2名 数据类型 [comment '字段注释'],
字段3名 数据类型 [comment '字段注释']
) [character set 字符集] [collate 校验规则] [engine 存储引擎];
语法拆解
- 字段名:自定义列名,和库名规则一致,避免用关键字
- 数据类型:必须指定,常用的有
int(整数)、varchar(长度)(可变长字符串)、char(长度)(定长字符串)、date(日期) comment:可选,给字段加注释,规范开发必加,方便后续理解字段含义- 字符集 / 校验规则:可选,不指定则自动继承所在数据库的配置
engine:存储引擎,常用的是InnoDB(MySQL5.5 + 默认)和MyISAM
实操
sql
-- 先进入我们之前创建的db库
use db;
-- 创建用户表users
create table if not exists users (
id int comment '用户ID',
name varchar(20) comment '用户名',
password char(32) comment '密码32位md5值',
birthday date comment '用户生日'
) character set utf8 engine MyISAM;
存储引擎的区别
不同存储引擎,表的存储文件不一样:
MyISAM:创建后生成 3 个文件:.frm(表结构)、.MYD(表数据)、.MYI(表索引)InnoDB:创建后生成 2 个文件:.frm(表结构)、.ibd(表数据 + 索引),支持事务、行级锁、外键,是现在最常用的引擎
2:查看表结构
1:简单查看表结构
sql
desc users;

| 字段名 | 含义 |
|---|---|
| Field | 字段名称 |
| Type | 字段的数据类型 |
| Null | 是否允许为空,YES 代表可以为空 |
| Key | 是否为索引 / 主键 |
| Default | 字段的默认值 |
| Extra | 额外属性(如自增、无符号等) |
2:查看完整的键表语句
sql
show create table users;

3:修改表
项目开发中,需求变更经常需要修改表结构,这是最常用的操作,不同场景对应不同语法,新手一定要分清区别。
先插入测试数据,方便后续验证:
sql
insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04');

1:添加字段
sql
-- 语法:ALTER TABLE 表名 ADD 字段名 数据类型 [comment 注释] [位置];
-- 示例:在birthday字段后面添加assets字段,存储图片路径
alter table users add assets varchar(100) comment '图片路径' after birthday;
- 不加位置参数,默认加到表的最后一列
- 要加到第一列,用
first关键字

2:修改字段的类型/属性
sql
-- 语法:ALTER TABLE 表名 MODIFY 字段名 新数据类型 [属性];
-- 示例:把name字段的长度从20改成60
alter table users modify name varchar(60);
核心:modify只能修改字段的类型,长度,属性,不能修改字段名
3:修改字段名(同时可修改类型)
sql
-- 语法:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [属性];
-- 示例:把name字段改名为xingming,长度保持60
alter table users change name xingming varchar(60);

4:删除字段
sql
-- 语法:ALTER TABLE 表名 DROP 字段名;
-- 示例:删除password字段
alter table users drop password;

致命警告
删除字段会把该列的所有数据一起删除,无法恢复,生产环境绝对禁止随意执行!
5:修改表名
sql
-- 语法:ALTER TABLE 旧表名 RENAME [TO] 新表名;
-- 示例:把users表改名为employee
alter table users rename to employee;
说明:to关键字可以省略,直接写alter table users rename employee;
4:删除表
sql
DROP TABLE [IF EXISTS] 表名1 [,表名2...];
实操
sql
drop table if exists employee;