mySQL - 插入三个表

时间:2009-11-12 15:52:02

标签: mysql database join insert relational

我最近问了this问题。

  
    

我有一个包含三个表的关系数据库。第一个包含id     与第二个有关。第二     包含与...相关的id     第三。第三个包含结果     我在追求。

  
     

是否可以使用单个查询   查询第一个表中的id   给出第三个表的所有结果   与它有关吗?

我选择的解决方案是:

  

select * from table1 t1 join table2 t2   在t1.t2ref = t2.id上加入table3 t3   t2.t3ref = t3.id

     

添加要搜索的where子句   table1中的某些行

     

其中t1.field ='value'

我的新问题是:

我意识到我也需要插入三个表格。我正在处理的是一个预订系统。是否有可能在查询后直接插入三个表(使用连接?)。

我还有另一个考虑因素是我应该使用事务来确保同时运行两个查询...都发现id是“未保留”然后导致双重预订或者是否有更简单的方法?

3 个答案:

答案 0 :(得分:8)

您绝对应该在事务中执行三个插入操作。我可能会写一个存储过程来处理插入。

编辑:

以下是带有事务的存储过程的示例。请注意使用LAST_INSERT_ID()来获取先前插入的记录的ID。这只是两个表,但您应该能够将它扩展到三个表。

DELIMITER //
CREATE PROCEDURE new_engineer_with_task(
  first CHAR(35), last CHAR(35), email CHAR(255), tool_id INT)
BEGIN
START TRANSACTION;
   INSERT INTO engineers (firstname, lastname, email) 
     VALUES(first, last, email);

   INSERT INTO tasks (engineer_id, tool_id) 
     VALUES(LAST_INSERT_ID(), tool_id);
COMMIT;
END//
DELIMITER ;

你这样称呼它:

CALL new_engineer_with_task('Jerry', 'Fernholz', 'me@somewhere.com', 1);

答案 1 :(得分:1)

您无法使用一个查询插入多个表,您必须将其分解为多个查询。

答案 2 :(得分:1)

执行多次更新时,您始终使用交易。如果一次更新失败,您将需要回滚以前成功的更新,这样就不会违反关系模型的任何未强制约束。