MySQL 中的数据库(Database)就像是一个容器,其中包含了各种对象。例如,数据表(Table)、视图(View)、存储过程(Stored Procedure)以及触发器(Trigger)等。其中,表是存储数据的主要对象。它们之间的关系如下图所示:
本篇主要介绍数据库的创建、查看、选择和删除操作,包括使用 mysql 命令行和 MySQL Workbench 图形工具两种方式。
存储数据需要先创建表,而创建表之前需要创建数据库。我们先使用 mysql 命令行客户端登录数据库,点击开始菜单 -> “MySQL” -> “MySQL 8.0 Command Line Client”,输入 root 用户密码:
MySQL 中使用CREATE DATABASE
语句创建一个新的数据库:
CREATE DATABASE [IF NOT EXISTS] dbname;
其中,dbname 指定了新数据库的名称;IF NOT EXISTS
是一个可选项,如果创建的数据库已经存在,使用该选项可以避免提示错误信息;数据库名称必须唯一。
举例来说,以下语句用于创建一个名为 hrdb 的数据库:
mysql> CREATE DATABASE hrdb;
Query OK, 1 row affected (0.27 sec)
那么,如何查看我们创建的数据库呢?MySQL 提供了SHOW DATABASES
命令(不区分大小写)可以列出系统中的所有数据库:
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| hrdb |
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
7 rows in set (0.03 sec)
其中,information_schema、mysql、performance_schema 以及 sys 是 MySQL 的系统数据库。sakila 和 world 是我们安装的示例数据库。hrdb 是刚刚新建的数据库。显然,一个 MySQL 实例服务可以管理多个数据库。
MySQL 中的数据库和模式(Schema)是相同的概念,因此也可以使用
SHOW SCHEMAS
命令查看数据库列表。
创建数据库时,还可以指定一些选项,例如字符集(Character Set)和排序规则(Collation)。
不同的字符集支持的字符种类和数量不同,例如 ASCII 字符集只能存储字母、数字和常见的符号,GB2312 和 GB18030 可以支持中文,Unicode 字符集能够支持多国语言。排序规则定义了字符的排序顺序,例如是否区分大小写、是否区分重音、中文按照拼音还是偏旁进行排序等。
因此,更完整的CREATE DATABASE
语句如下:
CREATE DATABASE [IF NOT EXISTS] dbname
[CHARACTER SET charset_name]
[COLLATE collation_name];
CHARACTER SET
选项用于指定字符集,如果不指定,默认为 utf8mb4;COLLATE选项用于指定排序规则,utf8mb4 字符集的默认排序规则为 utf8mb4_0900_ai_ci,表示不区分重音和大小写。
我们使用 GBK 字符集创建一个数据库 testdb:
mysql> create database testdb
-> character set gbk;
Query OK, 1 row affected (0.14 sec)
然后使用以下命令查看创建 testdb 数据库的语句:
mysql> show create database testdb;
+----------+---------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------------------------------------+
| testdb | CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
使用
SHOW CHARACTER SET
命令可以查看系统支持的所有字符集,使用SHOW COLLATION
命令可以查看字符集支持的排序规则。
在访问表或者其他对象之前,我们必须告诉 MySQL 使用哪个数据库,不同数据库中可以存在同名的对象。MySQL 使用USE
命令指定一个工作数据库:
USE dbname;
我们将 hrdb 设置为工作数据库:
mysql> USE hrdb;
Database changed
在此之后,我们执行的各种创建表、查询数据等操作都将在该数据库中进行;除非再次执行USE
命令更改工作数据库。
删除数据库意味着同时删除数据库中的其他所有对象,并且不可恢复;因此执行之前需要十分小心!
MySQL 使用DROP DATABASE
语句删除一个数据库:
DROP DATABASE [IF EXISTS] dbname;
其中,dbname 指定了要删除的数据库。IF EXISTS
是一个可选项,如果被删除的数据库不存在,使用该选项可以避免提示错误信息。
我们将 hrdb 和 testdb 数据库删除:
mysql> drop database hrdb;
Query OK, 0 rows affected (0.17 sec)
mysql> drop database testdb;
Query OK, 0 row affected (0.23 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.00 sec)
再次查看数据库列表,显示 hrdb 和 testdb 不存在。
MySQL 中的数据库和模式(Schema)是相同的概念,因此也可以使用
DROP SCHEMA
命令删除数据库。
MySQL Workbench 提供了图形化的操作方式,使用更加简单。
使用 MySQL Workbench 连接数据库之后,左侧默认列出了所有的数据库。点击工具栏下面的“create a new schema in the connected server”图标:
显示以下窗口:
输入数据库的名称,设置可选的字符集和排序规则。点击“Apply”按钮:
界面显示创建数据库的命令,方便学习 SQL 语句。再次点击“Apply”按钮完成数据库的创建。此时,界面左侧显示了新建的数据库:
选择左侧数据库列表中的 hrdb,点击右键并选择“Set as Default Schema”,将其设置为工作数据库。
选择左侧数据库列表中的 hrdb,点击右键并选择“Drop Schema”:
可以点击“Review SQL”查看相应的删除语句,也可以点击“Drop Now”直接删除数据库。删除之后的数据库不再显示在左侧的列表中。
有了数据库之后,接下来就是创建数据表。