Mar*_*ark 2 mysql database join relational insert
我最近问了这个问题.
我有一个有三个表的关系数据库.第一个包含与第二个相关的id.第二个包含与第三个相关的id.第三个包含我追求的结果.
是否可以使用单个查询来查询第一个表中的id,该表给出了与第三个表相关的所有结果?
我选择的解决方案是:
select*from table1 t1 join table2 t2 on t1.t2ref = t2.id join table3 t3 on t2.t3ref = t3.id
添加where子句以搜索table1中的某些行
其中t1.field ='value'
我的新问题是:
我意识到我也需要插入三个表格.我正在处理的是一个预订系统.是否可以编写一个查询,在查询后直接插入三个表(使用连接?).
我还有另外一个考虑因素是我应该使用事务来确保同时运行两个查询...都发现id是"未保留"然后导致双重预订或者是否有更简单的方法?
您绝对应该在事务中执行三个插入.我可能会编写一个存储过程来处理插入.
编辑:
以下是带有事务的存储过程的示例.请注意使用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 ;
Run Code Online (Sandbox Code Playgroud)
你这么称呼它:
CALL new_engineer_with_task('Jerry', 'Fernholz', 'me@somewhere.com', 1);
Run Code Online (Sandbox Code Playgroud)