0

mysql数据库中有两张表academyinstructors. 我想按以下顺序向每个表插入值(伪代码):

  • 第一个 INSERT INTO academyacad_name, address, street, city, state
  • 第二个 INSERT INTOinstructorsinstructor_name
  • 3rd INSERT INTO academyvalues instructor_idFROM instructors \this 记录应与相应的academy_id

第三次插入基于第二次插入的结果,instructor_id即 auto_increment。但是我希望第三个插入对应于当前学院的值,之前插入的值我该怎么做?

CREATE TABLE IF NOT EXISTS `academy` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `academy_id` int(11) NOT NULL,
  `instructor_id` int(11) DEFAULT NULL,
  `street_address` varchar(50) NOT NULL,
  `city` varchar(25) NOT NULL,
  `state` varchar(25) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `instructor_id` (`instructor_id`) // Foreign KEY
);

CREATE TABLE IF NOT EXISTS `instructors` (
  `instructor_id` int(11) NOT NULL AUTO_INCREMENT,
  `academy_id` int(11) NOT NULL
  PRIMARY KEY (`instructor_id`),
  KEY `academy_id` (`academy_id`) // Foreign KEY
);
4

4 回答 4

1

您可以使用 insert id 函数检索学院表的 id 并添加到其他表插入中。

mysqli

mysqli_insert_id();

mysql

 mysql_insert_id();
于 2013-11-14T07:30:42.720 回答
1

您的表结构有点混乱。当您有一个(我假设)唯一的“academy_id”字段时,为什么在表学院中有一个自动递增的“id”字段,使用“academy_id”作为主键。

表结构意味着一个多对多的关系,每个表对另一个表都有一个外键约束,假设在正常情况下,一个讲师只属于一个学院,但一个学院可以有多个讲师,您应该删除外键约束从表学院,然后从表讲师的外键约束中引用属于该学院的所有讲师。

如果场景暗示必须存在多对多关系,那么您必须创建一个交集实体。这意味着如果一个学院有很多讲师,并且一个讲师可以有很多学院,那么您可以创建一个新表,其中包含来自表学院的两个外键约束和具有唯一 id 字段的讲师以及新表。

于 2013-11-14T07:47:26.537 回答
0

首先将条目插入到学院表中,然后插入到讲师表中。然后使用

mysql_insert_id

获取最后插入的 id 并更新学院表中的条目。 检查这个问题

于 2013-11-14T07:35:17.207 回答
0

您可以在每次插入后查询自动增量列的值,例如

SELECT @insert_id:=`AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'YourDatabaseName'
AND   TABLE_NAME   = 'YourTableName';
) 

或者

INSERT INTO `academy`(`id`) VALUES (NULL);
SET @last_insert_id = LAST_INSERT_ID();

将其设置为用户定义的变量,然后在连续插入中使用它。

但是,如果发生多个并行插入,您还必须使用锁定表才能使用正确的自动增量 ID 值。

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

于 2013-11-14T07:40:40.353 回答