数据库的简单操作

1. 实验介绍

1.1 实验内容

在本节内容中,我们将介绍关于数据库的一些常用操作。

1.2 实验知识点

  • 数据表,行列的概念
  • 查看数据库列表
  • 创建数据库
  • 查看创建数据库的语句
  • 修改数据库
  • 删除数据库

2. 数据库基础

2.1 数据表

关系数据库的表采用二维表格来存储数据,是一种按行与列排列的具有相关信息的逻辑组,它类似于 Excle 工作表。一个数据库可以包含任意多个数据表。

2.2 列

表是由一个或多个列(column)组成,又称为字段,而每一列都保存有相应的数据,并且有指定的数据类型

2.3 行

在数据表中,数据的存储方式是以行(row)的方式来进行存储的,也称为一条记录,记录中的每项数据都与列对应

2.4 主键

对于每一条数据(记录)来说,即表中的每一行,都应该有唯一标识自身的列。就如同我们每个人一样,可能有相同的名字,但是有着唯一的身份证号。这样的列被称为表的主键,也可以使用多个列一起作为主键。

有时候,我们可能并不需要设计主键。

3. 数据库的操作

3.1 数据库列表

我们可以查看 MySQL 服务器上的数据库,SQL 的语法格式如下:

SHOW DATABASES [LIKE 'pattern' | WHERE expr]

在开始详细介绍该语法的关键字含义之前,首先需要说明一下语法描述的格式,在后面的内容中,将不再重复。大家如果对后面的内容中会涉及到的语法不清楚其含义的,可以参考这部分内容:

  • 语法中的可选项,使用方括号 [] 表示,例如一些可以设置的配置项,查询的过滤条件等信息
  • 从一组成员中必须选择一个时,使用大括号 { },例如 { 1 | 2},必须选择 1 或者 2
  • 省略号 ... 表示省略部分内容,也可以表示该语句可以重复
  • 可以使用多个值的时候,加上逗号

在 MySQL 中,SHOW DATABASES 和 SHOW SCHEMAS 的意义相同,选择其中一个使用即可。而 LIKE 可通过 pattern 表达式匹配某些数据库的名称,WHERE 可以通过设定相应的条件对结果进行限定,详细的内容在后面的课程中我们将会学习到。

首先,我们可以连接到服务器,然后查看有哪些数据库:

shiyanlou@:~$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 46
Server version: 5.5.58-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in SET (0.00 sec)

mysql>

此时,我们并未创建新的数据库,显示的是 MySQL 安装后自动创建的数据库的名称。

需要说明的是。SQL 对于大小写是不敏感的,即不区分大小写,但这只是针对 SQL 的关键词,例如,上一节内容中提到的 SHOW VARIABLES 或者这里使用的 SHOW DATABASES,我们也可以使用 show variables 或者 show databases 等命令。而对于一些非关键词来说,大小写是有意义的,例如我们的数据库名,数据表名等等。

在文档中,我们统一对 MySQL 保留词使用大写,方便阅读。

3.2 创建数据库

创建数据库的语法格式如下:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_specification] ...

create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

db_name 代指数据库名称,[IF NOT EXISTS] 是一个判断语句,代表如果当前服务器中不存在名称为 db_name 的数据库,则创建它。而如果存在,该语句不会报错。未使用该选项时,如果服务器中有同名的数据库时,会提示出错并给出部分错误信息。

create_specification 用来修改创建数据库时默认的字符集(CHARACTER SET),或者指定相应的排序规则(COLLATE),而排序规则并不常用,一般默认即可,不需要单独指定。

我们试着创建一个名为 shiyanlou001 的数据库,如下:

mysql> CREATE DATABASE shiyanlou001;
Query OK, 1 row affected (0.00 sec)

mysql>

创建成功后,会有对应的语句执行成功的提示信息 Query OK。

接着再创建一个名为 shiyanlou002 的数据库,指定不存在该数据库时创建,并且设定该数据库的默认字符集为 utf8,如下所示:

mysql> CREATE DATABASE IF NOT EXISTS shiyanlou002 CHARACTER SET = utf8;
Query OK, 1 row affected (0.00 sec)

mysql>

这时,我们可以再次查看数据库列表,如下所示:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| shiyanlou001       |
| shiyanlou002       |
+--------------------+
5 rows in SET (0.00 sec)

mysql>

3.3 查看创建语句

对于一个数据库而言,我们还可以查看其具体的创建语句,语法格式如下:

SHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name

例如可以查看我们刚刚创建的 shiyanlou001 和 shiyanlou002 数据库:

mysql> SHOW CREATE DATABASE shiyanlou001;
+--------------+-------------------------------------------------------------------------+
| Database     | Create Database                                                         |
+--------------+-------------------------------------------------------------------------+
| shiyanlou001 | CREATE DATABASE shiyanlou001 /*!40100 DEFAULT CHARACTER SET latin1 */ |
+--------------+-------------------------------------------------------------------------+
1 row in SET (0.00 sec)

mysql> SHOW CREATE DATABASE shiyanlou002;
+--------------+-----------------------------------------------------------------------+
| Database     | Create Database                                                       |
+--------------+-----------------------------------------------------------------------+
| shiyanlou002 | CREATE DATABASE shiyanlou002 /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------------+-----------------------------------------------------------------------+
1 row in SET (0.00 sec)

mysql>

如上所示,我们可以看到数据库 shiyanlou001 使用的默认的字符集(CHARACTER SET)为 latin1,而数据库 shiyanlou002 则为 utf8。并且显示的语句与我们刚刚使用的语句会有一些区别,MySQL 会将我们输入的语句进行解析优化,然后执行,解析后得到的标准语句如上所示。

除了使用上述方式之外,这里介绍一种反转 MYSQL 输出结果的方式,在上一节的内容中,提到过语句使用 ; 号以及 \g 结尾,但是我们还可以使用 \G 结尾,将会根据行来打印,即一行一行的内容进行输出,如下所示:

mysql> show create database shiyanlou002 \G
********* 1. row *********
       Database: shiyanlou002
Create Database: CREATE DATABASE shiyanlou002 /*!40100 DEFAULT CHARACTER SET utf8 */
1 row in set (0.00 sec)

上述操作将会打印每一个单独的行。

3.4 修改数据库的定义

latin1 字符集并不支持中文,在上一节的内容中,我们有提到过修改配置文件,使用命令行选项,或者使用 SET 设置变量等方式修改默认的字符集。但是对于已经被创建的数据库并不能生效,这里我们将学习一个新的语法去实现这一操作,语法格式如下:

ALTER {DATABASE | SCHEMA} [db_name]
    alter_specification ...

alter_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

我们将数据库 shiyanlou001 的字符集由 latin1 改为 utf8:

mysql> ALTER DATABASE shiyanlou001 CHARACTER SET = utf8;
Query OK, 1 row affected (0.00 sec)

mysql>

这时,再次查看该数据库的创建语句,就可以看到相应的内容被修改,如下所示:

mysql> SHOW CREATE DATABASE shiyanlou001;
+--------------+-----------------------------------------------------------------------+
| Database     | Create Database                                                       |
+--------------+-----------------------------------------------------------------------+
| shiyanlou001 | CREATE DATABASE shiyanlou001 /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------------+-----------------------------------------------------------------------+
1 row in SET (0.00 sec)

mysql>

3.5 删除数据库

删除数据库的语法格式如下:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

[IF EXISTS] 与 [IF NOT EXISTS] 相对应,代表着如果存在该数据库,则将其删除。

这里我们删除数据库 shiyanlou002:

mysql> DROP DATABASE IF EXISTS shiyanlou002;
Query OK, 0 rows affected (0.00 sec)

mysql>

3.6 选择使用某一个数据库

通过上面的内容我们可以知道在服务器中是有多个数据库的,并且我们也可以创建多个数据库,所以在使用时,需要指定使用某一个数据库,相应的语法格式如下:

USE db_name

该语句会使得某一个数据库作为默认的值,例如,我们选择 shiyanlou001 数据库:

mysql> USE shiyanlou001;
Database changed
mysql>

如上所示,我们可以看到 Database changed ,即使用的数据库被改变。除此之外,我们也可以在连接到服务器的时候跟上相应的数据库名,如下示例:

# 输入不存在的数据库时提示错误

shiyanlou@ubuntu:~$ mysql -u root -p shiyanlou
Enter password:
ERROR 1049 (42000): Unknown DATABASE 'shiyanlou'

# 输入正确的数据库名,连接成功
shiyanlou@ubuntu:~$ mysql -u root -p shiyanlou001
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 52
Server version: 5.5.58-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

在数据库名称与服务器中的数据库名称不一致时,会有对应的提示信息,ERROR 1049 (42000): Unknown DATABASE 'shiyanlou'。指定数据库名称可以通过 -D 参数,但是可以省略,上述示例中就省略了 -D 参数。

除了选择数据库之外,我们还可以查看当前服务器中,默认选择的数据库的名称,使用 mysql> SELECT DATABASE()即可,如下示例,首先,我们连接到服务器,然后查看默认的数据库为 NULL ,接着使用 USE shiyanlou001 ,修改使用的数据库,然后再次查看。

shiyanlou@ubuntu:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 54
Server version: 5.5.58-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| NULL       |
+------------+
1 row in SET (0.00 sec)

mysql> USE shiyanlou001;
Database changed
mysql> SELECT DATABASE();
+--------------+
| DATABASE()   |
+--------------+
| shiyanlou001 |
+--------------+
1 row in SET (0.00 sec)

mysql>

除了使用 use 语句之外,我们还可以直接申明某一个数据库来操作其中的表,使用 database.table 的语句,例如,查询 mysql 数据库中的 user 表,就可以使用:

select * from mysql.user;

数据库基本操作视频:

4. 总结

在本节内容中,我们熟悉了数据库的常用操作。

results matching ""

    No results matching ""