SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; ------------------------------ --Table structure for clazz -- ---------------------------- DROP TABLE IF EXISTS `clazz`; CREATE TABLE `clazz` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, PRIMARY KEY(`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; ------------------------------ --Records of clazz -- ---------------------------- INSERT INTO `clazz` VALUES(1, '软件 221'); INSERT INTO `clazz` VALUES(2, '软件 222'); ------------------------------ --Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `birth` datetime(0) NOT NULL, `clazz_id` int(10) UNSIGNED NOT NULL, PRIMARY KEY(`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; ------------------------------ --Records of student -- ---------------------------- --(此处暂无学生数据插入)
时间: 2025-05-16 09:06:09 浏览: 31
您提供了一组 SQL 语句,以下是关于这些语句的功能及作用的详细说明:
---
### **第一步:设置会话变量**
#### ```sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
```
- **`SET NAMES utf8mb4;`**:
设置当前客户端与数据库之间的通信字符集为 `utf8mb4`。这一步非常重要,尤其是在涉及到多语言支持(例如中文、表情符号等)的情况下,能够避免乱码问题。
- **`SET FOREIGN_KEY_CHECKS = 0;`**:
关闭外键约束检查。这样做通常是为了允许对某些表结构进行修改或删除操作而不受外键关联的影响。需要注意的是,在实际生产环境中应谨慎使用该命令。
---
### **第二步:创建班级表 (clazz)**
#### 表结构定义
```sql
DROP TABLE IF EXISTS `clazz`;
CREATE TABLE `clazz` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY(`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
```
- **功能描述**:
- 删除已存在的同名表 `clazz` (如果存在),以防止冲突。
- 新建一个名为 `clazz` 的表,包含两个字段:
1. **`id`**: 主键,自增整数类型 (`int(10) UNSIGNED`)。
2. **`name`**: 存储班级名字,最大长度为 20 字符串,采用 `utf8mb4` 编码存储。
- 设置主键索引为 B+ 树结构,并指定字符集和排序规则为 `utf8mb4_general_ci`。
- 引擎选用 `InnoDB`,初始自增值从 3 开始递增。
#### 插入测试数据
```sql
INSERT INTO `clazz` VALUES(1, '软件 221');
INSERT INTO `clazz` VALUES(2, '软件 222');
```
向 `clazz` 表中插入两条记录,分别代表“软件 221”班和“软件 222”班。
---
### **第三步:创建学生表 (student)**
#### 表结构定义
```sql
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`birth` datetime(0) NOT NULL,
`clazz_id` int(10) UNSIGNED NOT NULL,
PRIMARY KEY(`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
```
- **功能描述**:
- 删除已存在的同名表 `student`(如果有)。
- 新建一个名为 `student` 的表,包含四个字段:
1. **`id`**: 主键,自增整数类型 (`int(10) UNSIGNED`)。
2. **`name`**: 学生姓名,最大长度为 20 字符串,同样采用 `utf8mb4` 编码。
3. **`birth`**: 出生日期,`datetime(0)` 类型。
4. **`clazz_id`**: 所属班级的外键引用,这里尚未明确设置外键关系,仅作为普通字段存在。
- 其余配置类似前面提到的 `clazz` 表。
#### 数据填充部分
注释表明暂时未添加任何学生成绩数据。(即无 `INSERT INTO student ...`)
---
### 总结
通过以上 SQL 脚本实现了两个基础实体表的设计及其初始化过程:
1. 创建了一个班级信息表 (`clazz`) 并加入示例数据;
2. 定义了另一个学生信息表 (`student`) 结构框架待后续完善具体内容。
最终目的是为了构建一个简单的学校管理系统雏形模型——每个学生属于某个特定班级,而每条记录都携带唯一标识编号便于管理维护。
---
阅读全文
相关推荐









