MySQL 初步了解
任务描述
- 大一的同学们,请各自在自己的电脑安装mysql,安装完后学习建表,了解表、字段、数据类型、索引、关联等概念,并自行建二个表,配置字段,并建立关联,任务截止下周三
任务分析
通过ai工具,得到涉及到的知识点
MySQL安装:
- 安装MySQL数据库服务器。
- 建表操作:
- 了解如何创建数据库表。
- 熟悉表的基本结构,包括表名、字段、数据类型等。
- 表、字段、数据类型:
- 了解表是数据库中的数据组织方式,由字段(列)和数据行组成。
- 学习不同的数据类型,例如整数、字符串、日期等。
- 索引:
- 了解索引的作用和优势,它可以提高查询效率。
- 学习如何在表中创建索引。
- 关联:
- 理解关联的概念,即在不同表之间建立关系。
- 学习如何在表中定义外键,以建立关联。
- 配置字段:
- 学习如何配置字段,包括选择合适的数据类型、定义约束等。
- 实际操作:
- 根据任务要求,在自己的电脑上创建两个表,配置字段,并建立它们之间的关联。
安装 MySQL
建表
准备建立两个表,一个存班级,一个存学生,学生表中的班级字段必须对应班级表中的某一项,即存在外键
建库
1 2
| mysql> CREATE DATABASE school; Query OK, 1 row affected (0.01 sec)
|
建表
首先创建classes表
1 2 3 4 5
| CREATE TABLE `classes` ( `class_number` int(11) NOT NULL, `class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, PRIMARY KEY (`class_number`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
|
接着创建students表
1 2 3 4 5 6 7 8 9
| CREATE TABLE `students` ( `id` int(11) NOT NULL, `name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `class` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `student2classes`(`class`) USING BTREE, INDEX `name`(`name`) USING HASH; CONSTRAINT `student2classes` FOREIGN KEY (`class`) REFERENCES `classes` (`class_number`) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
|
外键测试
此时,先向classes表中填入数据
然后向students表中插入数据
首先,如果class字段的值在classes表中存在,则插入成功
1 2
| mysql> INSERT INTO students (id,name,class) VALUES (3,'nnnm',5); Query OK, 1 row affected (0.01 sec)
|
反之,则会报错
1 2
| mysql> INSERT INTO students (id,name,class) VALUES (4,'nnnm',50); 1452 - Cannot add or update a child row: a foreign key constraint fails (`school`.`students`, CONSTRAINT `student2classes` FOREIGN KEY (`class`) REFERENCES `classes` (`class_number`) ON UPDATE CASCADE)
|
说明外键约束起到了作用
连接测试
无连接情况
首先最朴素的查询所有数据
1 2 3 4 5 6 7 8 9
| mysql> SELECT * FROM students; + | id | name | class | + | 1 | 1 | 1 | | 2 | nnn | 5 | | 3 | nnnm | 5 | + 3 rows in set (0.03 sec)
|
可见正常返回表内的内容
使用连接
然后使用 INNER JOIN,连接classes表中的class_name字段
1 2 3 4 5 6 7 8 9
| mysql> SELECT students.*,classes.class_name FROM students INNER JOIN classes ON students.class = classes.class_number; + | id | name | class | class_name | + | 1 | 1 | 1 | Kaneko Electronic Corporation | | 2 | nnn | 5 | Tsubasa Corporation | | 3 | nnnm | 5 | Tsubasa Corporation | + 3 rows in set (0.04 sec)
|
可见,返回的数据中包含了在classes表中对应的class_name字段的值
杜家楷
11月19日01:18