当前位置: 首页 > news >正文

MySQL 库的操作

1. 创建与删除数据库

创建数据库

语法:

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]

create_specification:

[DEFAULT] CHARACTER SET charset_name

[DEFAULT] COLLATE collation_name

  • db_name:数据库名
  • IF NOT EXISTS:如果要创建的数据库不存在就创建,存在就不创建(避免报错)
  • CHARACTER SET:指定数据库采用的字符集
  • COLLATE:指定数据库字符集的校验规则

创建名为db1的数据库:create database db1:

mysql> show databases; +---------------------+ | Database | +---------------------+ | db1 | | helloworld | | information_schema | | mysql | | performance_schema | | sys | +---------------------+ 6 rows in set (0.01 sec)

当我们创建数据库没有指定字符集和校验规则时,系统会使用默认字符集和校验规则我的系统默认字符集是utf8mb4默认校验规则是utf8mb4_0900_ai_ci(如下图所示)。

mysql> show create database db1; +----------+----------------------------------------------------------------------------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------------------------------------------------------------------------+ | db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ | +----------+----------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

删除数据库

语法:drop database db_name

删除名为db1的数据库:drop database db1:

mysql> show databases; +--------------------+ | Database | +--------------------+ | db1 | | helloworld | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.01 sec) mysql> drop database db1; Query OK, 0 rows affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | helloworld | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec)

总结:创建数据库:create database db_name;删除数据库:drop database db_name

创建数据库的本质,就是在某条特定的路径下创建一个目录删除数据库的本质,就是删除在某条特定的路径下删除一个目录

注意:删除数据库会连同里面的所有数据表一起删除,建议不要随意删除。


2. 数据库编码

创建数据库时,涉及两个编码集:

  1. 数据库编码集:数据库存储数据时使用的编码格式
  2. 数据库校验集:数据库读取数据时使用的编码格式

核心原则数据库对数据做任何操作,都必须保证操作和编码保持一致

查看系统默认字符集以及校验规则:

show variables like 'character_set_database';查看系统默认字符集

show variables like 'collation_database';查看系统默认校验规则

我的系统默认字符集是 utf8mb4,默认校验规则是 utf8mb4_0900_ai_ci。

mysql> show variables like 'character_set_database'; +------------------------+---------+ | Variable_name | Value | +------------------------+---------+ | character_set_database | utf8mb4 | +------------------------+---------+ 1 row in set (0.01 sec) mysql> show variables like 'collation_database'; +--------------------+-------------------+ | Variable_name | Value | +--------------------+-------------------+ | collation_database | utf8mb4_0900_ai_ci | +--------------------+-------------------+ 1 row in set (0.01 sec)

实际上,目前整个数据库的校验规则都是 utf8mb4_09:

mysql> show variables like 'collation_%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8mb4_0900_ai_ci | | collation_database | utf8mb4_0900_ai_ci | | collation_server | utf8mb4_0900_ai_ci | +----------------------+-------------------+ 3 rows in set (0.01 sec)

输入show charset;查看数据库支持的所有字符集:

mysql> show charset; +----------+---------------------------------+-------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+---------------------------------+-------------------+--------+ | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | binary | Binary pseudo charset | binary | 1 | | cp1250 | Windows Central European | cp1250_general_ci | 1 | | cp1251 | Windows Cyrillic | cp1251_general_ci | 1 | | cp1256 | Windows Arabic | cp1256_general_ci | 1 | | cp1257 | Windows Baltic | cp1257_general_ci | 1 | | cp850 | DOS West European | cp850_general_ci | 1 | | cp852 | DOS Central European | cp852_general_ci | 1 | | cp866 | DOS Russian | cp866_general_ci | 1 | | cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 | | dec8 | DEC West European | dec8_swedish_ci | 1 | | eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 | | euckr | EUC-KR Korean | euckr_korean_ci | 2 | | gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 | | greek | ISO 8859-7 Greek | greek_general_ci | 1 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | hp8 | HP West European | hp8_english_ci | 1 | | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 | | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 | | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 | | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | | macce | Mac Central European | macce_general_ci | 1 | | macroman | Mac West European | macroman_general_ci | 1 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | utf16 | UTF-16 Unicode | utf16_general_ci | 4 | | utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 | | utf32 | UTF-32 Unicode | utf32_general_ci | 4 | | utf8mb3 | UTF-8 Unicode | utf8mb3_general_ci | 3 | | utf8mb4 | UTF-8 Unicode | utf8mb4_0900_ai_ci | 4 | +----------+---------------------------------+-------------------+--------+

输入show collation;查看数据库支持的校验规则。


创建指定字符集/校验规则的数据库

创建一个使用 utf8mb4 字符集的db2数据库:create database db2 charset=utf8mb4;或者 create database db2 character set utf8mb4;

mysql> create database db2 charset=utf8mb4; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | db2 | | helloworld | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec)

总结:创建一个使用特定字符集的数据库create database db_name charset=charset_name;或者create database db_name character set utf8mb4;

创建使用 utf8mb4_0900_ai_ci 校验规则的 db3 数据库:create database db3 collate utf8mb4_0900_ai_ci;

mysql> create database db3 collate utf8mb4_0900_ai_ci; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | db2 | | db3 | | helloworld | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 7 rows in set (0.00 sec)

总结:创建一个使用特定校验规则的数据库create database db_name collate collate_name


校验规则的区别演示

创建一个校验规则为 utf8mb4_0900_ai_ci(不区分大小写)的数据库:create database db_name collate utf8mb4_0900_ai_ci;

mysql> create database databasel collate utf8mb4_0900_ai_ci; Query OK, 1 row affected (0.01 sec) mysql> use databasel; Database changed mysql> create table test(name varchar(20)); Query OK, 0 rows affected (0.03 sec) mysql> insert into test values('a'); Query OK, 1 row affected (0.01 sec) mysql> insert into test values('A'); Query OK, 1 row affected (0.01 sec) mysql> insert into test values('b'); Query OK, 1 row affected (0.01 sec) mysql> insert into test values('B'); Query OK, 1 row affected (0.01 sec)

不区分大小写时的排序和查询结果:

mysql> use database1; Database changed mysql> select * from test order by name; +-------+ | name | +-------+ | a | | A | | b | | B | +-------+ 4 rows in set (0.00 sec)

创建一个校验规则为 utf8mb4_bin(区分大小写)的数据库:create database db_name collate utf8mb4_bin;

mysql> create database database2 collate utf8mb4_bin; Query OK, 1 row affected (0.01 sec) mysql> use database2; Database changed mysql> create table test(name varchar(20)); Query OK, 0 rows affected (0.03 sec) mysql> insert into test values('a'); Query OK, 1 row affected (0.01 sec) mysql> insert into test values('A'); Query OK, 1 row affected (0.00 sec) mysql> insert into test values('b'); Query OK, 1 row affected (0.01 sec) mysql> insert into test values('B'); Query OK, 1 row affected (0.01 sec)

区分大小写时的排序和查询结果:

mysql> use database2; Database changed mysql> select * from test order by name; +-------+ | name | +-------+ | A | | B | | a | | b | +-------+ 4 rows in set (0.00 sec)

结论校验规则不同,查询和排序的结果也会不同

为什么要在数据库层面设置字符集和校验规则?为了能够存储任意字符集和校验规则的表格。实际开发中,如果没有特殊需求,按数据库默认的字符集和校验规则创建即可,需要指定时再单独配置


3. 操作数据库

查看所有数据库:show databases;

mysql> show databases; +--------------------+ | Database | +--------------------+ | database1 | | database2 | | helloworld | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 7 rows in set (0.00 sec)

查看数据库的创建语句:show create database db_name;

mysql> show create database database1; +-----------+----------------------------------------------------------------------------------------------------------------------------------+ | Database | Create Database | +-----------+----------------------------------------------------------------------------------------------------------------------------------+ | database1 | CREATE DATABASE `database1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ | +-----------+----------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

!40100 表示:如果当前使用的mysql版本是大于401,就执行后续的语句,后面就是默认的字符集和校验规则,即 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N',这就是默认字符集和校验规则。

确认当前正在使用的数据库:select database();

mysql> select database(); +------------+ | database() | +------------+ | database1 | +------------+ 1 row in set (0.00 sec)

修改数据库,语法:

ALTER DATABASE db_name [alter_spacification [,alter_spacification]...] alter_spacification:

[DEFAULT] CHARACTER SET charset_name

[DEFAULT] COLLATE collation_name

查看表中的字段:desc 表名;

mysql> desc test; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 1 row in set (0.01 sec)

4. 数据库的备份与还原

备份整个数据库 —— 语法:mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

示例:将数据库 database1 备份到当前路径下的 database1.sql 文件中:

root@hcss-ecs-3ea8:/home/xayy/MYSQL# mysqldump -P3306 -uroot -p -B database1 > database1.sql Enter password: root@hcss-ecs-3ea8:/home/xayy/MYSQL# ls database1.sql

备份文件中的内容:将历史上对 database1 数据库执行过的所有有效操作都保存了下来

-- MySQL dump 10.13 Distrib 8.0.46, for Linux (x86_64) -- -- Host: localhost Database: database1 -- ------------------------------------------------------ -- Server version 8.0.46 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!50503 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Current Database: `database1` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `database1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; USE `database1`; -- -- Table structure for table `test` -- DROP TABLE IF EXISTS `test`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `test` ( `name` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `test` -- LOCK TABLES `test` WRITE; /*!40000 ALTER TABLE `test` DISABLE KEYS */; INSERT INTO `test` VALUES ('a'),('A'),('b'),('B'); /*!40000 ALTER TABLE `test` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2026-05-02 16:05:57

还原 —— 语法:source 文件路径

mysql> show databases; +--------------------+ | Database | +--------------------+ | database2 | | helloworld | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) mysql> source /home/xay/MYSQL/database1.sql; Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 1 row affected (0.01 sec) Database changed Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.01 sec) Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | database1 | | database2 | | helloworld | | information_schema | | mysql | | performance_schema | | sys | +--------------------+

备份一张或多张表(不备份整个数据库)mysqldump -u root -p 数据库名 表名1 表名2 > 文件路径/文件名

同时备份多个数据库:mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

如果备份一个数据库时,没有带上-B参数,在恢复数据库时需要

  1. 先手动创建空的数据库
  2. 使用 use 数据库名; 选中它
  3. 再执行 source 恢复

查看数据库的连接情况:show processlist;

mysql> show processlist; +----+-----------------+-----------+------------+---------+------+-------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------+------------+---------+------+-------------------+------------------+ | 7 | event_scheduler | localhost | NULL | Daemon | 1625443 | Waiting on empty queue | NULL | | 30 | root | localhost | database1 | Query | 0 | init | show processlist | +----+-----------------+-----------+------------+---------+------+-------------------+------------------+ 2 rows in set, 1 warning (0.00 sec)
http://www.jsqmd.com/news/838330/

相关文章:

  • 从蓝牙4.2到5.4:广播包格式的‘进化史’与向后兼容那些坑
  • AChat开源项目:快速构建本地大模型Web聊天界面的轻量级脚手架
  • 5分钟掌握猫抓扩展:浏览器视频下载终极指南
  • 暗黑破坏神2存档编辑器完整指南:如何5分钟内打造你的完美角色
  • 基于Go与Croc构建Telegram文件传输机器人:原理、部署与优化
  • XHS-Downloader:小红书内容批量下载终极指南
  • OrigamiSimulator:从平面到立体的折纸魔法,让想象力自由飞翔的终极指南
  • GPT5.5合同要点提炼:责任方、时间节点、违约条款抽取
  • 别再手动调色了!用Matlab bar3函数+addcolorplus,5分钟搞定论文级渐变三维柱状图
  • 如何将AI 3D模型生成工具集成到你的开发工作流
  • 别再死记硬背真值表了!用Verilog手搓半减器/全减器,从波形图反推逻辑门设计
  • 哔咔漫画下载器终极指南:3步搞定个人离线漫画库
  • Codesys标签通讯实战:三步搞定昆仑屏数据交互
  • NotebookLM权限配置必须在24小时内完成的4项关键校验(附自动化checklist+curl一键验证脚本)
  • 扣图操作方法全攻略:从入门到精通,一文掌握AI抠图技巧
  • 终极指南:如何用FanControl实现Windows系统风扇智能控制
  • LAMMPS效率翻倍秘籍:从单机到并行,你的MPICH配置真的对了吗?
  • 各种遍历算法之二叉树的最大深度
  • ComfyUI ControlNet Aux终极指南:30+预处理节点完全解析与快速部署方案
  • 告别手动!用Allegro Testprep脚本批量处理测试点,效率提升200%
  • 5.17 赵文奇
  • 2026 年视频生成模型横评:Seedance 2.0 vs Sora 2 Pro vs Kling 3.0 深度解析与实测教程
  • Java17/21实战|用模式匹配干掉90%的if-else和强制转换,代码瞬间优雅!
  • 在西安莲湖区看牙的真实体验记录
  • 北京改灯认准这家!LED / 激光透镜专业升级,亮度翻倍 - 北京波波
  • Play Integrity API验证工具:Android设备完整性检测的完整指南
  • Agent 工程化系列 · 第 13 篇_Agent安全与可靠性如何保障
  • 电赛小白也能搞定的二维云台:用K210+舵机实现色块追踪(附完整代码)
  • AMD锐龙SDT调试工具终极指南:解锁处理器性能的完整解决方案
  • 5分钟上手:Blender VRM插件完整指南,让虚拟角色创作变得简单高效