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:

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

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

bash 复制代码
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:

bash 复制代码
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。

bash 复制代码
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:

bash 复制代码
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; 查看数据库支持的所有字符集:

bash 复制代码
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;

bash 复制代码
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;

bash 复制代码
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;

bash 复制代码
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)

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

bash 复制代码
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;

cpp 复制代码
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)

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

bash 复制代码
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;

bash 复制代码
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;

cpp 复制代码
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();

bash 复制代码
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 表名;

cpp 复制代码
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 文件中:

bash 复制代码
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 数据库执行过的所有有效操作都保存了下来

bash 复制代码
-- 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 文件路径

bash 复制代码
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;

bash 复制代码
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)
相关推荐
埃伊蟹黄面1 小时前
数据库基础认识
数据库
看我干嘛!1 小时前
Redis安装
数据库·redis·缓存
2401_824697662 小时前
如何管理Oracle服务器的内核共享内存_shmmax与shmall计算
jvm·数据库·python
2301_783848652 小时前
mysql数据迁移过程如何降低性能影响_采用增量备份与多线程同步
jvm·数据库·python
【心态好不摆烂】2 小时前
MySQL——表的约束(上)
数据库·mysql
小娄~~2 小时前
IO模型与并发服务器
运维·服务器·数据库
2401_884454152 小时前
CSS如何快速实现网站换肤功能_利用CSS变量重置全局颜色方案
jvm·数据库·python
fengxin_rou2 小时前
数据库三大范式深度详解:数据表设计规范化实战指南
数据库·mysql·范式
2301_809244532 小时前
PHP函数是否支持调用FPGA设备_PHP与FPGA硬件交互的实现方式【教程】
jvm·数据库·python