仅使用MySQL代码将多维数据插入表中

时间:2018-08-24 21:19:57

标签: mysql

我正在探索使用mysql过程对嵌入其他json对象的json对象执行插入语句的可能性。假设我创建了这两个mysql表:

CREATE TABLE `student` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `birth_date` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


CREATE TABLE `course` (
  `course_id` int(11) unsigned NOT NULL,
  `student_id` int(11) unsigned NOT NULL,
  `enrollment_date` date NOT NULL,
  CONSTRAINT `courses_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

假设我正在接收以下JSON对象,该对象打算转换并插入到Student和Course表中:

let payload = [
    {
        name:"Alice",
        birth_date:"1968-01-28",
        courses:[
            {course_id:4325,enrollment_date:"2018-05-01"},
            {course_id:3119,enrollment_date:"2018-09-01"},
            {course_id:1302,enrollment_date:"2018-01-01"},
        ],
    },
    {
        name:"Bob",
        birth_date:"1971-10-01",
        courses:[
            {course_id:2000,enrollment_date:"2018-09-01"},
            {course_id:3109,enrollment_date:"2018-09-01"},
            {course_id:4305,enrollment_date:"2018-09-01"},
        ],
    },
];

过去,我会使用执行此类操作的客户端代码插入json数据

foreach (payload as student) {
    studentId = exec_prepared_statement("INSERT INTO student SET name= ?, birth_date = ?",student.name,student.birth_date)
    foreach(student.courses as course){
        courseId = exec_prepared_statement("INSERT INTO course SET student_id = ?, course_id = ?, enrollment_date = ?",studentId, course.course_id,course.enrollment_date)
    }
}

但是我不确定如何使用纯MySQL代码实现这一系列的插入行为,因为我不确定如何将多维数据传递到mysql存储过程中。如果能在某处看到一个例子,那将是很棒的。

或者,有人可以告诉我是否应该完全避免尝试仅通过MySQL代码插入多维数据...我应该拥有像PHP,Go,JS这样的客户端代码来完成这项工作?我真的很想看看仅使用MySQL的情况,以便我可以比较哪一种更易于维护。

0 个答案:

没有答案