MySQL上手-库与表的操作编码校验集与备份还原

MySQL 上手:库与表的操作、编码校验集与备份还原

我的github:(https://github.com/xcx55/ubuntu-linux-project)

感谢各位大佬参观我的github!!

源笔记:mysql库操作1(26-9-18)、MySQL表的操作(26-9-19)

上一篇把 MySQL 的真面目看清了:mysqld 守护进程 + mysql 客户端,DB=目录、表=文件。这一篇正式上手------先学三个库指令,再学建表改表,最后把"编码集/校验集"这个最容易踩的坑和备份还原一起解决。

一、库操作:三个指令打天下

围绕数据库(注意:是 database,不是表文件),常用的就三个动作:看库、建库、删库:

sql 复制代码
show databases;         -- 看有哪些数据库
create database xxx;    -- 创建数据库(本质:创建文件夹,上层封装了 API)
alter database xxx ...; -- 修改数据库
drop database xxx;      -- 删除数据库(本质:删目录)

记住上一篇的结论就不难理解这些指令:数据库的本质就是文件夹 ,所以"对库的操作"翻译成 Linux 就是 mkdir/ls/rm------只是 mysqld 替你干了,还顺手做了权限、记录、并发管理。

use:进入数据库的"cd"

对一个数据库建表之前,必须先 use 数据库名字------相当于 cd 进目录。 数据库是文件夹,建表就是在文件夹里建文件,你得先"进"这个文件夹。

二、编码集与校验集:存和取必须是同一套

建库时最容易被忽略、又最容易出事的一对概念:

  • 编码集 :决定数据以什么编码存入;
  • 校验集 :决定数据以什么编码取出/比较。

为什么要有两个标准?两个用处:

  1. 存储数据一样------存进去什么样,得原样取出来;
  2. 后面支持字段比较------比较字符串时,得用同样的函数方法比较。

所以铁律来了:

要是存的编码和取(校验)的编码不一样,就会导致识别读取的区别! 存进去是 UTF-8、按 GBK 校验取出来,中文立刻变成乱码。

存入用什么编码,取出就得用同一套------这是建库时就该定好的事,别等表里灌了几万行数据再改。

三、删库之前:先聊聊备份

drop database 是最痛快也最危险的指令。删库之前怎么备份?

为什么不用 cp 直接把文件拷走? 可以,但有更好的选择------mysqldump:

bash 复制代码
mysqldump -u root -p -B 数据库名 > 备份文件.sql

它比裸 cp 强在两点:

  1. 不仅拷贝了数据 ,还把这个数据库的操作指令也记录了(建库建表的完整 SQL 都在备份里);
  2. -B 参数的妙用:恢复指令里自带 create database xxx,主动创建库------不用你先手动建好空库再灌数据。

恢复也简单:

  • 备份:在 Linux 命令行里做(mysqldump 是外部工具);
  • 恢复:在 mysql 命令行 里 source + 绝对路径------备份文件里的 SQL 逐条执行,库就回来了。

四、建表:建立的是表的"格式"

sql 复制代码
create table if not exists user1(
    id int comment '机器查找需要',
    name varchar(32) comment '人看的注释',
    birthday date comment '出生日期'
);

几个要点:

  • if not exists:存在就不再建,脚本可以反复执行;
  • comment 是注释 :写给"人"看的说明。注意字段语义的分工------id 是机器查找需要的,注释是给人看的;
  • date 在 MySQL 里是一种类型!生日、注册日这类"年月日"不用自己拼字符串,直接有原生类型(还有 datetime、timestamp 一族)。

表结构、存储引擎与索引

建表时会发现同样的建表语句,表结构(底层文件布局)可能不一样 ------这和存储引擎有关:

表结构 ------ 存储引擎 ------ 索引

选哪个引擎(InnoDB/MyISAM),决定了数据在文件里怎么组织、索引怎么建。插件式引擎就像上一篇说的"插件类似一个类",new 出来就能换。

建立表,本质是建立表的格式(列名、类型、注释、引擎)------先有格式,再往里灌数据。

五、查看与修改表

查看表结构

三连:先 use 进库 → show tables; 看有哪些表 → desc 表名; 看表的格式(每列的类型、键、默认值一目了然)。

修改表:一切从 alter table 开始

前提语法:alter table 表名 ... 表示"我要改你这张表的结构(属性和属性类型)了"------和"改表里的数据"完全是两码事。

sql 复制代码
-- 新增一列,还可以指定插到哪一列后面
alter table user add image_path varchar(128) comment '头像路径' after birthday;

-- 修改属性类型(modify 中文也是"修改")
alter table user modify name varchar(64);

-- 修改属性名字
alter table user change name username varchar(32);

-- 改表名 / 删表
alter table user rename to user1;
drop table user1;

一条重要的工程原则

一般不要修改和删除表!要改就增加!

为什么?表结构一动,依赖这张表的代码、SQL、备份全都要跟着动;而加列是向后兼容的,老代码照跑。所以:

  • 增删查改(zscg)这个词,默认是针对"表文件里面的数据"说的------业务天天做;
  • 对"表结构"的增删查改,走 alter table------能不做就不做,做了要慎重。

总结

  • 库三连:show/create/drop database,本质就是文件夹操作;use = cd,建表前必做;
  • 编码集管存、校验集管取和比较,两套必须一致,否则乱码;
  • 备份用 mysqldump -B (数据+建库语句全记录),cp 裸拷做不到;恢复在 mysql 里 source 绝对路径;
  • 建表建的是格式 :comment 给人看、id 给机器用、date 是原生类型;表结构-存储引擎-索引一条线;
  • 查结构三连 use → show → desc;改结构一切从 alter table 开始,add/modify/change 分工不同;
  • 原则:对数据随便 CRUD,对表结构能加不改不删。

下一篇回到网络线:UDP 报文在内核里到底长什么样、sk_buff 怎么用一根指针玩转封装解包------以及网络服务为什么必须"守护进程化"才能活。

相关推荐
志栋智能2 小时前
安全超自动化如何支持快速安全扩容?
运维·服务器·数据库·架构·自动化
gb421528710 小时前
向量数据库多模态特性
数据库
泡海椒10 小时前
数据占比展示:jquick-pdf饼图动态数据渲染PDF教程
数据库·oracle·pdf
大连好光景10 小时前
向量数据库的工作流程详解
数据库·milvus
catchadmin10 小时前
用 Jev 与 Laravel AI SDK 检测垃圾邮件和自动回复
数据库·人工智能·laravel
吠品11 小时前
CSS图片模糊过渡:一个transition加filter就够
java·数据库·notepad++
梦想不只是梦与想13 小时前
对象存储服务器vs数据库
数据库·对象存储·图片存储
Ivanqhz13 小时前
正余弦位置编码(Sinusoidal Positional Encoding)
java·linux·数据库
Ivanqhz13 小时前
层归一化、残差、前馈网络与激活函数简述
服务器·数据库·人工智能·深度学习·算法