在MySQL数据库中创建数据与查询数据

12002

本课介绍

在本课中,我们将学习MySQL数据库的基本结构,包括数据库和数据表的关系以及数据表的概念。通过理解这些概念,我们将学习如何使用SQL语句创建数据库和数据表,了解它们的结构,并学习如何使用基础的SQL查询语句SELECT来查询数据。

1. 理解MySQL数据库的结构

MySQL数据库的结构

在01课,我们已经介绍了关系型数据库的概念。MySQL是一种关系型数据库,在关系型数据库中,以表格的形式存储数据,每个表格被称为数据表。数据库中的数据表之间可以存在不同类型的关系,比如一对一、一对多、多对多等。这些关系定义了数据之间的连接方式和交互方式,帮助我们更好地组织和管理数据。

数据表的结构

  • 认识数据表

数据表是关系型数据库中的一种基本对象,它就像文件柜里的一个文件夹一样,存储了某一类特定的数据。例如,一个记录客户信息的"客户表",可能记录了客户名称、地址、电话等基础信息。

  • 数据表的结构

数据表由多个"行"和"列"组成,类似于Excel的表格,其中每一行代表一条数据的记录值,每一列代表一种数据的类型的。

因此,在数据表中,每一列都有一个名称(字段名),定义了该列中数据的类型(如整数、字符串、日期等)。每一行包含了表中每个字段的具体数值,这些数值构成了一条完整的数据记录。

数据库与数据表的关系

用一个比喻来说,数据库相当于文件夹,而数据表则相当于文件夹下的文件,我们通过数据库管理表格,实现数据的存储和管理。数据库与数据表的关系可以简要总结如下:

  • 数据库是表的容器:在关系型数据库中,数据库是存储表的容器。一个数据库可以包含一个或多个表。每个表都有一个唯一的名字,用于在数据库中标识它。

  • 表是数据的结构化表示:表是关系型数据库中数据的基本存储单位。每个表都由行和列组成。行表示数据记录,列则定义了数据的类型和名称。例如,一个“学生”表可能包含“学号”、“姓名”、“年龄”等列。

  • 数据库提供了对表的管理功能:数据库不仅仅是表的容器,它还提供了对表的管理功能。例如,你可以在数据库中创建、删除、修改表,或者查询表中的数据。数据库还提供了对数据完整性和安全性的保护机制,例如事务管理、权限控制等。

  • 表之间可以有关联:在同一个数据库中,表之间可以通过关联关系进行连接。这是关系型数据库的一个重要特性。例如,"学生"表和"课程"表可以通过"选课"表关联起来,表示哪个学生选了哪个课程。

现在,我们理解了数据库结构、数据表结构以及数据库和数据表的关系,接下来就可以动手创建数据库和数据表,进步一通过操作理解概念。

2. 创建数据库与数据表

创建数据库与数据表最简单的方法,就是使用SQL语句。下面我们做一个简单的示例,教大家如何在 Navicat 中使用 SQL 语句创建数据库和数据表,通过操作进一步理解数据库、数据表的长相和结构。

使用SQL语句创建数据库

  1. 选择你要打开的MySQL数据库连接,点击右键并选择"打开连接"。

MySQL-cd1.png

  1. 打开连接后,点击导航栏中的"新建查询"。

sql-cd1.png

  1. 点击后,会出现一个SQL编辑器。需要注意的是:确保编辑器中显示的数据库连接名称与你打开的数据库连接名称一致,以免新建的数据库放在了其他连接中。

sql-cd2.png

  1. 复制以下新建数据库的SQL语句,并在粘贴在打开的查询窗口中,其中"mystudent"为新建的数据库名称,点击"运行"。
  1. CREATE DATABASE mystudent;

sql-cd3.png

  1. 运行后,会看到一个查询结果如下;信息栏中显示为"OK",代表数据库"mystudent"已经创建好了。

sql-cd4.png

  1. 点击右键并选择"刷新"。

sql-cd5.png

  1. 刷新后,创建的数据库"mystudent"显示在MySQL连接中,双击"mystudent",就打开数据库了。

sql-cd6.png

创建数据库非常简单,创建好的数据库包括:表、视图、函数、查询、备份,这些都是数据库重要的组成部分和常用功能。接下来,我们继续在新建的"mystudent"数据库中,创建数据表。

使用SQL语句创建数据表

  1. 点击选中数据库"mystudent"后,点击导航栏中的"新建查询"。你会看到出现的SQL编辑器中,数据库连接名、数据库名与你所选中的数据连接和数据库的名称是一致的。

sql-ct1.png

  1. 复制以下新建数据表的SQL语句,并在粘贴在打开的查询窗口中,其中"student"为新建的数据表名称,"id"、"studentId"、"name"、"gender"为数据表的列名,点击"运行"。
  1. CREATE TABLE student (
  2. id INT PRIMARY KEY,
  3. studentId VARCHAR(255),
  4. name VARCHAR(255),
  5. gender VARCHAR(255),
  6. age INT
  7. );

sql-ct2.png

  1. 运行后,会看到一个查询结果如下;信息栏中显示为"OK",代表数据表"student"已经创建好了。

sql-ct3.png

  1. 点击右键并选择"刷新"。

sql-ct4.png

  1. 刷新后,双击"表",你会看到创建的数据表"student"显示在"mystudent"数据库中,再双击"student",就打开数据表了。"student"表的样式如下:

sql-ct5.png

这样,一个数据表就创建好了。接下来,我们通过"student"表,讲解一下数据表的定义。

数据表的定义

新建数据表就是定义数据表的结构和属性的过程。数据表的定义,包括表名、列名和列的数据类型等信息。表名是数据表的唯一标识符,用于在数据库中区分不同的表;列名表示数据的属性,每个列都有一个名称和数据类型,用于定义了该列中存储的数据的类型;列的数据类型定义了该列中存储的数据的类型,例如整数、字符串、日期等。

我们刚才创建数据表使用的SQL语句,就是一个数据表的定义示例:

  1. CREATE TABLE student (
  2. id INT PRIMARY KEY,
  3. studentId VARCHAR(255),
  4. name VARCHAR(255),
  5. gender VARCHAR(255),
  6. age INT
  7. );

通过 SQL 语句创建数据表"student",我们可以清晰地了解数据表的长相,以及数据表的结构和各个字段的含义。我们对这段示例的解释如下:

  • 表名(Table Name): 表名是数据表的唯一标识符,用于在数据库中区分不同的表。在上面的示例中,表名为 "student"。

  • 字段(Column): 字段是表的属性,每个字段有一个名称和数据类型,用于定义该字段可以存储的数据内容。在示例中,包括 id、studentId、name、age、gender 字段。

  • 数据类型(Data Types):数据类型定义了每个字段可以存储的数据的类型。在示例中,包括整数类型(INT)、字符类型(VARCHAR)。

  • 主键(Primary Key): 主键是表中一列或一组列,其值可以唯一标识表中的每一行记录。主键的存在确保表中的每条记录都具有唯一性。在示例中,id 列被指定为主键。

示例:在MyStudent中创建数据表student、sc

我们已经了解了数据表的定义,但之前创建的数据表只有结构,没有实际的数据。现在,让我们在 Navicat 的 SQL 编辑器中运行以下 SQL 语句,来创建完整的数据表 "student" 和 "sc",以便进行后续的学习:

  • student 数据表 (学生的基本信息表):
  1. DROP TABLE IF EXISTS `student`;
  2. CREATE TABLE `student` (
  3. `SId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  4. `Sname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  5. `Sage` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  6. `Ssex` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
  7. ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  8. INSERT INTO `student` VALUES ('01', '赵磊', '1990-01-01 00:00:00', '男');
  9. INSERT INTO `student` VALUES ('02', '钱电', '1990-12-21 00:00:00', '男');
  10. INSERT INTO `student` VALUES ('03', '孙峰', '1990-05-20 00:00:00', '男');
  11. INSERT INTO `student` VALUES ('04', '李云', '1990-08-06 00:00:00', '男');
  12. INSERT INTO `student` VALUES ('05', '周美', '1991-12-01 00:00:00', '女');
  13. INSERT INTO `student` VALUES ('06', '吴兰', '1992-03-01 00:00:00', '女');
  14. INSERT INTO `student` VALUES ('07', '郑竹', '1989-07-01 00:00:00', '女');
  15. INSERT INTO `student` VALUES ('09', '张兰', '2017-12-20 00:00:00', '女');
  16. INSERT INTO `student` VALUES ('10', '李花', '2017-12-25 00:00:00', '女');
  17. INSERT INTO `student` VALUES ('11', '李兰', '2017-12-30 00:00:00', '女');
  18. INSERT INTO `student` VALUES ('12', '赵花', '2017-01-01 00:00:00', '女');
  19. INSERT INTO `student` VALUES ('13', '孙梅', '2018-01-01 00:00:00', '女');
  • sc 数据表(学生的成绩表):
  1. DROP TABLE IF EXISTS `sc`;
  2. CREATE TABLE `sc` (
  3. `SId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  4. `Sname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  5. `Cname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  6. `score` decimal(18, 1) NULL DEFAULT NULL
  7. ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  8. INSERT INTO `sc` VALUES ('01','赵磊', '语文', 80.0);
  9. INSERT INTO `sc` VALUES ('01','赵磊', '数学', 90.0);
  10. INSERT INTO `sc` VALUES ('01','赵磊', '英语', 99.0);
  11. INSERT INTO `sc` VALUES ('02','赵磊', '语文', 70.0);
  12. INSERT INTO `sc` VALUES ('02','钱电', '数学', 60.0);
  13. INSERT INTO `sc` VALUES ('02','钱电', '英语', 80.0);
  14. INSERT INTO `sc` VALUES ('03','孙峰', '语文', 80.0);
  15. INSERT INTO `sc` VALUES ('03','孙峰', '数学', 80.0);
  16. INSERT INTO `sc` VALUES ('03','孙峰', '英语', 80.0);
  17. INSERT INTO `sc` VALUES ('04','李云', '语文', 50.0);
  18. INSERT INTO `sc` VALUES ('04','李云', '数学', 30.0);
  19. INSERT INTO `sc` VALUES ('04','李云', '英语', 20.0);
  20. INSERT INTO `sc` VALUES ('05','周美', '语文', 76.0);
  21. INSERT INTO `sc` VALUES ('05','周美', '数学', 87.0);
  22. INSERT INTO `sc` VALUES ('06','吴兰', '语文', 31.0);
  23. INSERT INTO `sc` VALUES ('06','吴兰', '英语', 34.0);
  24. INSERT INTO `sc` VALUES ('07','郑竹', '数学', 89.0);
  25. INSERT INTO `sc` VALUES ('07','郑竹', '英语', 98.0);

3. 基础的SQL查询语句

编程就是解决数据增删改查的问题。在关系型数据库中,数据管理的基本操作包括新增、修改、删除和查询,其中查询是最常用的操作。SQL 中使用 SELECT 语句从数据库中获取数据,它可以让你选择从哪个表中获取哪些字段的数据。

查询语句SELECT基本语法结构如下:

  1. SELECT column1, column2, ...
  2. FROM table_name;

其中,SELECT 后跟着要查询的列名,可以是单个列或多个列,用逗号分隔;FROM 指定了要查询的数据表的表名。

使用SELECT语句查询学生信息

现在,我们有一个数据表"student",包含 SIdSnameSageSsex这四列,我们可以使用 SELECT 查询语句来查询所有学生的姓名和出生日期:

  1. SELECT Sname, Sage
  2. FROM student;

在 Navicat 中运行这段查询语句,你会获取 student 表中所有学生的姓名和出生日期的信息:

sql-cx1.png

如果想查询 student 表中所有的信息,可以使用通配符星号“ * ”,表示 “ 所有 ”:

  1. SELECT *
  2. FROM student;

sql-cx3.png

使用SELECT语句查询学生成绩

我们还可以查询学生的成绩。数据表"sc",包含 SIdSnameCnamescore这四列,如果我们想查询所有学生的考试科目和成绩,也可以使用 SELECT 查询语:

  1. SELECT Sname,Cname,score
  2. FROM sc;

在 Navicat 中运行这段查询语句,你会获取 sc 表中所有学生的考试科目和成绩的信息:

sql-cx2.png

4. 在线学习资源

5. 作业

  • 读 SQL 文档,快快扫一遍。

  • 在资源里下载本课的 SQL 示范代码,通过新建查询,把四个表创建起来。

  • 在Navicat里,更多的尝试操作“连接”、“新建查询”、“表”等按钮,使用 SQL 语句练习创建数据库和数据表,并查询学生的数据。