MySQL 基础篇(二):数据库和数据表的基本操作

目录

本文内容概要

一、数据库的基本操作

[1.1 创建数据库](#1.1 创建数据库)

[1.2 数据库字符集和校验集](#1.2 数据库字符集和校验集)

[1.2.1 查看 MySQL 支持的字符集和校验集](#1.2.1 查看 MySQL 支持的字符集和校验集)

查看字符集

查看校验集

[1.3 删除数据库](#1.3 删除数据库)

[1.4 查看数据库](#1.4 查看数据库)

[1.4.1 查看当前 MySQL Server 有哪些数据库](#1.4.1 查看当前 MySQL Server 有哪些数据库)

[1.4.2 查看数据库的字符集和校验集](#1.4.2 查看数据库的字符集和校验集)

[1.4.3 切换/选择数据库:](#1.4.3 切换/选择数据库:)

[1.4.4 查看当前所处的数据库:](#1.4.4 查看当前所处的数据库:)

[1.5 修改数据库](#1.5 修改数据库)

[1.6 数据库的备份和恢复](#1.6 数据库的备份和恢复)

[1.7 查看数据库的连接情况](#1.7 查看数据库的连接情况)

二、数据表的基本操作

[2.1 创建数据表](#2.1 创建数据表)

[2.2 删除数据表](#2.2 删除数据表)

[2.3 查看数据表](#2.3 查看数据表)

[2.3.1 查看当前数据库中的所有数据表](#2.3.1 查看当前数据库中的所有数据表)

[2.3.2 查看数据表结构](#2.3.2 查看数据表结构)

[2.3.3 查看建表 SQL](#2.3.3 查看建表 SQL)

[2.3.4 查看表的详细状态](#2.3.4 查看表的详细状态)

[2.4 修改数据表](#2.4 修改数据表)

[2.4.1 向数据表中添加字段](#2.4.1 向数据表中添加字段)

[2.4.2 删除字段](#2.4.2 删除字段)

[2.4.3 修改字段类型/属性](#2.4.3 修改字段类型/属性)

[2.4.4 修改字段名和类型](#2.4.4 修改字段名和类型)

[2.4.5 修改表名](#2.4.5 修改表名)


本文内容概要

本文主要介绍 MySQL 中数据库与数据表的基本操作。通过本文的学习,需要掌握数据库和数据表的创建、删除、查看与修改操作;理解 MySQL 中字符集、校验规则以及存储引擎的基本概念与相关操作;掌握数据表字段的添加、删除、类型修改以及表名修改等操作,为后续学习 MySQL 中的数据增删查改以及 SQL 查询打下基础。

一、数据库的基本操作

1.1 创建数据库

|--------------------------------|---------------------------|
| SQL 语句 | Linux 文件系统 |
| 创建数据库:create database db_name; | 在 /var/lib/mysql 创建一个目录文件 |

如果创建已经存在的同名数据库,MySQL 会直接拦截此操作,不让用户执行。

对于上述情况,我们创建数据库时,可以带上 if not exists 选项,如果数据库不存在,则创建,如果数据库存在,MySQL 不会报错,但依旧不会创建它。

1.2 数据库字符集和校验集

数据库字符集:数据库存储数据的格式

数据库校验集:数据库读取数据的格式

对于任何一个数据库,它都有对应的字符集和校验集。

进入 /var/lib/mysql 路径下对应的数据库目录,即可查看该数据库的字符集和校验集。

在 MySQL 客户端中,也可以查看数据库的字符集和校验集。

1.2.1 查看 MySQL 支持的字符集和校验集

查看字符集
查看校验集

创建数据库时指定字符集和校验集

在 1.1 小节中,我们创建数据库时,并没有指定字符集和校验集,为什么创建好的数据库会自动带上字符集和校验集呢?

那是因为在 MySQL 配置文件**/etc/my.cnf**中,配置了创建数据库默认采用的字符集和校验集。

对于没有指定校验集,MySQL 会自动采用该字符集对应的校验集。

1.3 删除数据库

|------------------------------|---------------------------|
| SQL 语句 | Linux 文件系统 |
| 删除数据库:drop database db_name; | 在 /var/lib/mysql 删除一个目录文件 |

1.4 查看数据库

1.4.1 查看当前 MySQL Server 有哪些数据库

sql 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

1.4.2 查看数据库的字符集和校验集

sql 复制代码
mysql> show create database test;
+----------+---------------------------------------------------------------+
| Database | Create Database                                               |
+----------+---------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)

1.4.3 切换/选择数据库:

sql 复制代码
mysql> use test;
Database changed

1.4.4 查看当前所处的数据库:

sql 复制代码
mysql> select database();
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)

1.5 修改数据库

修改数据库的字符集和校验集

1.6 数据库的备份和恢复

cpp 复制代码
mysqldump -P 3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径;
sql 复制代码
source 数据库文件路径;

备份数据库:

cpp 复制代码
cat mytest.sql 
-- MySQL dump 10.13  Distrib 5.7.44, for Linux (x86_64)
--
-- Host: localhost    Database: test
-- ------------------------------------------------------
-- Server version	5.7.44
/*!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 /;
/!40101 SET NAMES utf8 /;
/!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: test
CREATE DATABASE /!32312 IF NOT EXISTS/ test /*!40100 DEFAULT CHARACTER SET gbk */;
USE test;
/*!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-09-30 15:21:23

mytest.sql 文件记录着对数据库的所有有效的历史操作,当还原数据库时,MySQL 服务端会将这些 SQL 语句重新执行一遍,完成数据库的还原。

还原数据库:

补充:如果备份的不是整个数据库,而是数据库的一张表:

sql 复制代码
mysqldump -u root -p 数据库名 表名1 表名2 > 数据库备份存储的文件路径;

同时备份多个数据库:

sql 复制代码
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径;

如果备份一个数据库时,没有带上 -B 选项,在恢复数据库时,需要先创建空数据库,然后进入该数据库,再使用 source 还原。

1.7 查看数据库的连接情况

sql 复制代码
mysql> show processlist;
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host      | db   | Command | Time | State    | Info             |
+----+------+-----------+------+---------+------+----------+------------------+
| 12 | root | localhost | test | Query   |    0 | starting | show processlist |
+----+------+-----------+------+---------+------+----------+------------------+
1 row in set (0.00 sec)

作用:查看当前 MySQL 有哪些用户连接。如果查出某些用户不是合法用户,那么说明数据库被其他人入侵了。对于使用 MySQL 数据库出现卡顿、缓慢时,也可以通过该指令查看是否是因为数据库连接情况而导致的。

二、数据表的基本操作

2.1 创建数据表

create table 表名称 (字段 类型, 字段 类型) charset=字符集 collate=校验集 engine=存储引擎;

sql 复制代码
mysql> create table person(name char(20), age int);
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| person         |
+----------------+
1 row in set (0.00 sec)

在创建数据表时,可以指定数据表的字符集、校验集、存储引擎。如果不指定字符集和校验集,数据表的字符集和校验集会继承数据库的字符集和校验集。对于存储引擎,它会采用 MySQL 数据库配置中的存储引擎。

查看 MySQL 支持的存储引擎:

不同的存储引擎在 Linux 文件系统中的差异

sql 复制代码
mysql> create table test_InnoDB(id int) engine=InnoDB;
Query OK, 0 rows affected (0.01 sec)
mysql> create table test_MyISAM(id int) engine=MyISAM;
Query OK, 0 rows affected (0.00 sec)
[root@iZ2zebg189x52z3hbfc0t4Z mysql]# ls test/
db.opt      person.ibd       test_InnoDB.ibd  test_MyISAM.MYD
person.frm  test_InnoDB.frm  test_MyISAM.frm  test_MyISAM.MYI

创建数据表的本质就是在 Linux 文件系统中创建普通文件。不同存储的数据表,它们创建普通文件的数量可能不同。

2.2 删除数据表

sql 复制代码
drop table table_name;
sql 复制代码
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| person         |
| test_InnoDB    |
| test_MyISAM    |
+----------------+
3 rows in set (0.01 sec)
mysql> drop table test_InnoDB;
Query OK, 0 rows affected (0.01 sec)
mysql> drop table test_MyISAM;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| person         |
+----------------+
1 row in set (0.00 sec)

删除数据表本质是在 Linux 文件系统中删除普通文件:

bash 复制代码
[root@iZ2zebg189x52z3hbfc0t4Z mysql]# ls test/
db.opt  person.frm  person.ibd

2.3 查看数据表

2.3.1 查看当前数据库中的所有数据表

sql 复制代码
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| person         |
+----------------+
1 row in set (0.00 sec)

2.3.2 查看数据表结构

sql 复制代码
mysql> desc person;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)

2.3.3 查看建表 SQL

sql 复制代码
mysql> show create table person;
+--------+--------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                             |
+--------+--------------------------------------------------------------------------------------------------------------------------+
| person | CREATE TABLE `person` (
  `name` char(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+--------+--------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show create table person \G;
*************************** 1. row ***************************
Table: person
Create Table: CREATE TABLE person (
name char(20) DEFAULT NULL,
age int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)

2.3.4 查看表的详细状态

sql 复制代码
mysql> show table status like 'person';
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+----------------+----------+----------------+---------+
| Name   | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation      | Checksum | Create_options | Comment |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+----------------+----------+----------------+---------+
| person | InnoDB |      10 | Dynamic    |    0 |              0 |       16384 |               0 |            0 |         0 |           NULL | 2026-09-30 15:40:58 | NULL        | NULL       | gbk_chinese_ci |     NULL |                |         |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+----------------+----------+----------------+---------+
1 row in set (0.00 sec)

2.4 修改数据表

sql 复制代码
alter table 表名 操作;

2.4.1 向数据表中添加字段

sql 复制代码
mysql> desc person;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)
mysql> alter table person add id int after age;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc person;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
| id    | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

2.4.2 删除字段

sql 复制代码
mysql> desc person;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
| id    | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> alter table person drop id;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc person;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

2.4.3 修改字段类型/属性

sql 复制代码
mysql> desc person;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> alter table person modify age varchar(40);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc person;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | char(20)    | YES  |     | NULL    |       |
| age   | varchar(40) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

2.4.4 修改字段名和类型

sql 复制代码
mysql> desc person;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | char(20)    | YES  |     | NULL    |       |
| age   | varchar(40) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> alter table person change age id int;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc person;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | YES  |     | NULL    |       |
| id    | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

2.4.5 修改表名

sql 复制代码
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| person         |
+----------------+
1 row in set (0.00 sec)
mysql> alter table person rename to employee;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| employee       |
+----------------+
1 row in set (0.00 sec)
相关推荐
Zenova EdgeOS1 小时前
工业网关心跳机制实战:Keepalive、应用层探活与健康判定
服务器·网络·数据库
阳光九叶草LXGZXJ1 小时前
Linux-学习-12-JDK安装
java·linux·运维·学习
龙腾AI白云10 小时前
AI检索增强生成(RAG):解决大模型幻觉的核心落地技术
数据库·人工智能·机器学习·知识图谱
一 乐10 小时前
动漫书销售商城|基于springboot + vue动漫书销售商城(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
zzj_26261010 小时前
MySQL常用操作
数据库·mysql
其实防守也摸鱼10 小时前
Fastjson 反序列化漏洞(JNDI注入)
android·数据库·安全·oracle·自动化·fastjson·反序列化
haerapi10 小时前
把 PostgreSQL 复制巡检做成可审计闭环:确定性采集、阈值判定与受控模型归纳
数据库·postgresql
跨境小彭11 小时前
Temu拉美站点铺货实操复盘:手动复制痛点与批量自动化解决方案
服务器·人工智能·搜索引擎·自动化·temu电商运营
yolo_guo11 小时前
调试mysql延迟与libevent回调实际发送回复时机问题
c++·mysql·libevent