我正在探索使用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的情况,以便我可以比较哪一种更易于维护。