MySQL的库和表的操作

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;
相关推荐
_376271531 小时前
如何正确验证 GOPATH 和 PATH 环境变量是否生效
jvm·数据库·python
安当加密1 小时前
数据库密码写配置文件?我用动态凭据管理重构了50个微服务的数据库连接
数据库·密码学·安全架构
m0_736439301 小时前
如何在phpMyAdmin中处理权限更改不生效_FLUSH PRIVILEGES命令执行
jvm·数据库·python
2401_824697661 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实用指南
jvm·数据库·python
思麟呀1 小时前
初始MySQL数据库
服务器·数据库·mysql
2403_883261091 小时前
CSS如何避免浮动元素换行_计算所有浮动元素的总宽度不超过父容器宽度
jvm·数据库·python
NineData1 小时前
NineData:AGI 数据时代,从 “人管” 到 “智理” 的范式跃迁
数据库·人工智能·oracle·agi·数据库管理工具·ninedata·数据库迁移工具
m0_609160491 小时前
Vue 中对象键名重复导致数据被覆盖的原理与解决方案
jvm·数据库·python
2401_880071401 小时前
SQL中如何查找特定的空值行:WHERE IS NULL深度解析
jvm·数据库·python