根据另一个插入的结果插入值

时间:2013-11-14 07:23:10

标签: mysql

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

  • 第一次INSERT INTO academyacad_name, address, street, city, state
  • 第二次INSERT INTO instructorsinstructor_name
  • 第三 INSERT INTO academyinstructor_id FROM instructors \该记录应与相应的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 个答案:

答案 0 :(得分:1)

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

mysqli

mysqli_insert_id();

<强> MySQL的

 mysql_insert_id();

答案 1 :(得分:1)

你的桌面结构有点令人困惑。为什么在表学院中有一个自动递增的'id'字段,当你有一个'academy_id'字段(我假设)是唯一的时,使用'academy_id'作为主键。

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

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

答案 2 :(得分:0)

首先在学院表中插入条目,然后在教师表中插入。然后使用

  

mysql_insert_id

获取最后插入的id并更新academy表中的条目。 Check this question

答案 3 :(得分:0)

您可以在每次插入后查询自动增量列的值, e.g。

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