数据库的管理
# 40.数据库的管理
# DBMS的概念
这里先说一个概念:数据库管理系统,Database Management System,简称DBMS。平时我们所说的MySQL,Oracle等都是数据库管理系统。关系型数据库还可以称为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来处理请求,包括读取数据,修改数据。怎么处理的呢?通过磁盘IO,此时示意图如下:
┌──────────────┐ 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
我们再次查询下,可以看到创建成功了,目前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
(完)