Skip to content

Latest commit

 

History

History
73 lines (59 loc) · 1.83 KB

04.实战练习-日常操作.md

File metadata and controls

73 lines (59 loc) · 1.83 KB

日常操作

题目

有两张表分别记录了老师和学生的数据,

teacher_id/student_id是表的自增主键

number是工号/学号,每个人都是唯一的,不能重复

teached_by表示学生是哪个老师教的,存的是teacher_id

  CREATE TABLE `teacher_table`  (
    `teacher_id` int(0) NOT NULL AUTO_INCREMENT,
    `name` varchar(255) NULL,
    `age` int(0) NULL,
    `number` varchar(255) NULL,
    PRIMARY KEY (`teacher_id`)
  );

  CREATE TABLE `student_table`  (
    `student_id` int(0) NOT NULL AUTO_INCREMENT,
    `name` varchar(255) NULL,
    `age` int(0) NULL,
    `number` varchar(255) NULL,
    `teached_by` int(0) NULL,
    PRIMARY KEY (`student_id`)
  );

现在要求写一个存储过程,把以下数据存进表里,并且根据number关联好teached_by关系

  {
    "teachers": [
      {
        "name": "Jenny",
        "age": 30,
        "number": "T002"
      }
    ],
    "students": [
      {
        "name": "Tony",
        "age": 18,
        "number": "S0002",
        "teached_by": "T002"
      },
      {
        "name": "Bob",
        "age": 19,
        "number": "S0003",
        "teached_by": "T002"
      }
    ]
  }

并且,该存储过程要返回Jenny老师所有学生的姓名的数组,即

["Tony", "Bob"]

可能题目要求看起来有点奇怪,但是需求总是奇怪的,不是吗?

思路分析

  • 题目给的数据是个复杂嵌套的JSON,也就是说,要在存储过程里完成JSON解析(前端直接传过来的数据一般都是JSON)
  • 每个人的number都是唯一的,对于传入的数据不能无条件信任,一定要做检查
  • 学生的teached_by依赖老师的teacher_id,也就是说,要先插入老师的数据之后才能拿到老师的主键teacher_id
  • 要求返回的数据其实是考数据的拼装