【问题标题】:MySQL Procedure to insert data to a table that use auto_increment, get the PK auto_increment generated and insert it into a bridgetable?MySQL程序将数据插入使用auto_increment的表,获取生成的PK auto_increment并将其插入桥接表?
【发布时间】:2021-02-01 00:54:02
【问题描述】:

我正在使用 PHP 在我学习的课程中创建一个 restApi。当涉及到数据库时,我不确定这个问题的最佳实践是什么 ->

我有每门课程所用语言的数据,为了规范数据,我在一个单独的表中有语言,并有一个连接它们的桥梁。

所以一张表用于 Courses,一张用于 Languages,一张桥接表用于连接它们。

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 并添加一个并将其发送到桥接表中?

【问题讨论】:

    标签: mysql sql many-to-many sql-insert auto-increment


    【解决方案1】:

    在 MySQL 中,您可以使用 last_insert_id() 检索您执行的最后一个 insert 查询的自动生成 id。你没有提供太多关于你的代码的细节,但逻辑是这样的:

    insert into course (education_id, coursename, points, grade)
    values (?, ?, ?, ?);
    
    insert into bridge_language (course_id, language_id)
    values (last_insert_id(), ?);
    

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多