MySQL过程将数据插入到使用auto_increment的表中,获取生成的PK auto_increment并将其插入到bridgetable中?

问题描述

我正在学习的课程中使用PHP创建restApi。对于数据库,我不确定该问题的最佳实践是什么->

我拥有每门课程所用语言的数据,为了使数据规范化,我在单独的表中拥有语言,并且通过桥梁将它们连接起来。

因此,一张表用于课程,一张用于语言,另一张用于连接它们的桥表。

CREATE TABLE `Courses` 
(`Course_ID` INT(11),`Education_ID` INT(11),`CourseName` VARCHAR(100) NOT NULL,`Points` VARCHAR (5),`Grade` VARCHAR(3),PRIMARY KEY (`Course_ID`)
);


CREATE TABLE `Language` (
  `Language_ID` INT(11),`Language` VARCHAR(100) NOT NULL,`Img_url` VARCHAR (200),PRIMARY KEY (`Language_ID`)
);
CREATE TABLE `Bridge_language` (
  `Course_ID` INT(11) NOT NULL,`Language_ID` INT(11) NOT NULL,KEY `PKFK` (`Course_ID`,`Language_ID`)
);
ALTER TABLE Courses MODIFY Course_ID INTEGER AUTO_INCREMENT;
ALTER TABLE Language MODIFY Language_ID INTEGER AUTO_INCREMENT;

添加新课程时,在sql中,我知道语言的ID(我将在管理页面添加新语言的功能),然后在创建新课程时,只需单击添加语言,然后语言的ID已添加

但是我没有的是使用auto_increment创建的课程的ID。您是否有使用sql中的函数/过程的聪明方法,可以掌握auto_increment生成的ID并将其添加到桥表中?

还是我需要查询数据库获取最新的ID并添加一个ID并将其发送到桥表中?

解决方法

在MySQL中,您可以使用last_insert_id()来检索您执行的最后一个.sql查询的自动生成的ID。您没有提供太多有关代码的详细信息,但逻辑类似于:

public class QueryUtil {
    static public String getQuery(String fileName) throws IOException {
        Path path = Paths.get("src/test/resources//" + fileName + ".sql");
        return Files.readAllLines(path).get(0);
    }
}