数据库的管理
# 40.数据库的管理
聊聊如何管理数据库(新增、修改、删除)。
# DBMS 的概念
这里先说一个概念:数据库管理系统,Database Management System,简称 DBMS。
平时我们所说的 MySQL,Oracle 等都是 DBMS,关系型数据库还可以称为 RDBMS(R 指的是 Relational,关系)
在 MySQL 里可以创建多个数据库,每个数据库里可以创建多个表,每个表里才是存储数据的地方。
例如,
一个 MySQL 可以创建多个数据库,每个数据库存储一个项目的所有数据。假如我们有三个项目:教务系统,商城,银行,则可以创建 3 个数据库。
每个数据库可以创建多个表,例如教务系统有学生表,教师表等;商城数据库有订单表,商品表等;
每个表内在存储具体的数据,例如一个商品表可能有如下数据:
商品编号 商品名称 商品种类 销售单价 进货单价 登记日期 0001 T 恤衫 衣服 1000 500 2009-9-20 0002 打孔器 办公用品 500 320 2009-9-11 0003 运动 T 恤 衣服 4000 2800 0004 菜刀 厨房用具 3000 2800 2009-9-20 0005 高压锅 厨房用具 6800 5000 2009-1-15 0006 叉子 厨房用具 500 2009-9-20 0007 擦菜板 厨房用具 880 790 2008-4-28 0008 圆珠笔 办公用品 100 2009-11-11
示意图:
DBMS 和 Excel 很相似:
- Excel 程序本身,可以视为一个 DBMS
- 一个 Excel 文件,则可以视为一个数据库
- 一个 Excel 文件里可以由多张表(sheet 页)
- 平时我们使用 Excel 表,都是修改具体某个 sheet 里的内容。
需要注意的是,在 DBMS 中表不能合并单元格,而 Excel 是可以的。
# CS 结构
目前 DBMS 常采用的系统结构是客户端 / 服务器类型(C/S 类型)。通过 C/S 结构,可以实现多个客户端访问同一个 DBMS。
我们可以将 MySQL(其他 DBMS 也是类似的)分为两部分:
- MySQL Server,真正的 MySQL 服务器
- MySQL Client,一个命令行客户端,可以通过它来连接 MySQL
示意图:
┌──────────────┐ SQL ┌──────────────┐
│ MySQL Client │───────>│ MySQL Server │
└──────────────┘ TCP └──────────────┘
2
3
4
MySQL Client 的可执行程序是 mysql,MySQL Server 的可执行程序是 mysqld。这也就是为什么之前我们讲 Linux 下启停 MySQL 的时候,用的命令是 mysqld 开头的。
然后由 Server 来处理请求,包括读取数据,修改数据。数据都是由 Server 帮我们存储在磁盘上的,示意图:
┌──────────────┐ SQL ┌──────────────┐ IO ┌──────────────┐
│ MySQL Client │───────>│ MySQL Server │───────>│ Disk │
└──────────────┘ TCP └──────────────┘ IO └──────────────┘
2
3
4
# 执行 SQL 的方法
接下来就开始边执行边学习 SQL 了。请先连接好数据库。
如果是在命令行执行 SQL:输入完 SQL 后,按下回车执行;
如果是在可视化工具执行:点击具体的执行按钮来执行。
例如 Navicat 的执行按钮:
# 数据库的管理
# 查看数据库版本
如下两个 SQL 都能查询到版本:
select @@version;
select version();
-- 结果:
+-----------+
| @@version |
+-----------+
| 8.1.0 |
+-----------+
1 row in set (0.00 sec)
2
3
4
5
6
7
8
9
10
其实,如果是通过命令行来连接,那么刚登录的时候也能看到版本信息的(参考上一篇文章)
# 查看数据库
可以用 show databases;
查看当前 DBMS 下,有多少个数据库,分别是什么:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.00 sec)
2
3
4
5
6
7
8
9
10
11
12
可以看到有 6 个,这 6 个是安装完 MySQL 后自动创建的。
简单说明这几个数据库是干嘛的:
- information_schema:用于记录其他数据库的基本信息
- mysql:用于记录 MySQL 相关,包括权限、用户、历史操作等核心信息
- performance_schema:用于记录数据库运行信息
- sakila:示例数据库,用来练习,由 Oracle 提供,用于模拟一个 DVD 租赁店,包含了很多表格以及表格关系
- sys:用于记录操作系统相关的内容
- world:有 3 张表 city,country 和 countrylanguage,主要是记录了全球的国家、城市和语言信息
# 创建数据库
我们可以用 create database 数据库名;
的方式来新建一个数据库:
mysql> create database shop;
Query OK, 1 row affected (0.00 sec)
2
我们再次用 show databases;
查询下,可以看到目前 MySQL 下有 7 个数据库,创建成功了:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| shop |
| sys |
| world |
+--------------------+
7 rows in set (0.00 sec)
2
3
4
5
6
7
8
9
10
11
12
13
# 删除数据库
语法:drop database 数据库名;
示例:
mysql> drop database shop;
Query OK, 0 rows affected (0.01 sec)
2
删除需谨慎,特别是没有备份的情况下。
# 指定数据库
对一个数据库进行操作时(例如查询表的数据,修改表的数据),要指定数据库:
mysql> use shop;
Database changed
2
# 查看当前指定的数据库
语法:select database();
示例
mysql> use shop;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| shop |
+------------+
1 row in set (0.00 sec)
2
3
4
5
6
7
8
9
10
11
# 查看建库语句
有时候想看该数据库是使用什么语句创建出来的,就可以用 show create database 数据库名;
命令,例如:
show create database shop;
-- 结果:
+----------+-------------------------------+
| Database | Create Database |
+----------+-----------------------------------+
| shop | CREATE DATABASE `shop` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------------+
1 row in set (0.01 sec)
2
3
4
5
6
7
8
9
(完)