在右侧命令行中操作,创建数据库MyDb,在MyDb下依次创建(存储引擎均为InnoDB): 1、表Department,表结构如下: 字段名称 数据类型 备注 deptId INT 系编号 deptName VARCHAR(10) 系名称 schId INT 所在学院编号 2、表School,表结构如下: 字段名称 数据类型 备注 schId INT 学院编号 schName VARCHAR(10) 学院名称 3、表Class,表结构如下: 字段名称 数据类型 备注 clsId INT 课程编号 clsName VARCHAR(10) 课程名称 4、表Grade,表结构如下: 字段名称 数据类型 备注 stuId INT 学生编号 clsId INT 课程编号 grade INT 成绩
时间: 2025-06-26 08:06:26 浏览: 9
### 创建 MySQL 数据库和 InnoDB 存储引擎的表
要创建一个名为 `MyDb` 的数据库并设置其默认存储引擎为 `InnoDB`,可以通过以下 SQL 语句实现:
#### 创建数据库
```sql
CREATE DATABASE MyDb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```
此操作会创建一个新的数据库 `MyDb` 并指定字符集为 `utf8mb4` 和排序规则为 `utf8mb4_general_ci`[^1]。
为了确保新创建的表都使用 `InnoDB` 存储引擎,可以在创建表时显式声明存储引擎属性。以下是针对 `Department`, `School`, `Class`, 和 `Grade` 表的具体定义示例:
#### Department 表
假设该表用于记录部门信息:
```sql
USE MyDb;
CREATE TABLE Department (
department_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
```
#### School 表
假设该表用于记录学校信息并与 `Department` 关联:
```sql
CREATE TABLE School (
school_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
address TEXT,
department_id INT,
FOREIGN KEY (department_id) REFERENCES Department(department_id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
```
#### Class 表
假设该表用于记录班级信息并与 `School` 关联:
```sql
CREATE TABLE Class (
class_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
grade_level ENUM('Freshman', 'Sophomore', 'Junior', 'Senior'),
school_id INT,
FOREIGN KEY (school_id) REFERENCES School(school_id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
```
#### Grade 表
假设该表用于记录学生的成绩数据并与 `Class` 关联:
```sql
CREATE TABLE Grade (
student_id INT,
class_id INT,
score DECIMAL(5, 2),
exam_date DATE,
PRIMARY KEY (student_id, class_id, exam_date),
FOREIGN KEY (class_id) REFERENCES Class(class_id),
CHECK (score >= 0 AND score <= 100)
) ENGINE=InnoDB;
```
以上代码片段展示了如何通过 SQL 显式设定存储引擎为 `InnoDB`,并通过外键约束建立不同表之间的关系[^3]。
### 使用 EXPLAIN 分析查询性能
如果需要进一步验证这些表的设计是否合理或者是否存在潜在性能问题,则可以利用 `EXPLAIN` 命令来查看优化器对于特定查询的操作计划。例如:
```sql
EXPLAIN SELECT * FROM Grade WHERE class_id = 1;
```
这可以帮助识别索引缺失或其他可能导致低效访问路径的因素。
阅读全文
相关推荐


















