2013-03-31 254 views
2

我有两个表MySQL的插入2个表一次有主键和外键

书表

  • ID(PK)
  • 标题
  • 作者
  • 类型
  • ISBN
  • 价格
  • 出版商

bookAwards表

  • ID(FK) - 参考Books.ID
  • Awardname

bookAwards的ID是books表中ID的外键。

我怎样才能将书籍表同时插入bookAwards表中?

当我试图插入到书籍表中,它给出了外键导致的错误?

我想插入书本表中的值,然后在bookAwards中输入一年的奖励名称?

任何帮助将不胜感激。

回答

2

您可以在此上使用STORED PROCEDURE,这样您只会从应用程序级调用一次。例如,

DELIMITER $$ 
CREATE PROCEDURE InsertBook 
(
    IN _Title INT, 
    IN _AwardName VARCHAR(35), 
    IN _Year INT 
) 
BEGIN 
    INSERT INTO Books (Title) 
    VALUES(_Title); 

    -- since the ID is set as AUTO_INCREMENT 
    -- there are two ways to do how you can get the ID 
    -- from the Books Table and insert it 
    -- on BookAwards 

    -- FIRST WAY 
    -- by using LAST_INSERT_ID() 
    SET @last_ID = LAST_INSERT_ID(); 

    -- SECOND WAY 
    -- by using MAX() 
    -- SET @last_ID = (SELECT MAX(ID) FROM Books); 


    INSERT INTO BookAwards(ID, AwardName, Year) 
    VALUES (@last_ID, _AwardName, _Year); 
END $$ 
DELIMITER ; 

而且在应用程序级别或您想调用这个程序的任何来源,

CALL InsertBook('Lost Art', 'Best in Churva', 2013); 

为了安全起见,你仍然可以参数化的程序,如

CALL InsertBook(?, ?, ?); 
+0

有没有更简单的方法呢?我使用PHP与MySQL。我有一个管理界面供一个图书馆使用。所以我想要做的是,当管理员想要将图书添加到目录页面时,他将值放入文本框中,然后在文本框中获取值并将其插入到这些表格中。我应该在mysql数据库中运行过程,然后在php脚本中调用过程? – user2127632

+0

你是什么意思?执行两条'INSERT'语句。而不是将其包装在存储的过程中。 –

+1

抱歉,由于某种原因,当我按住shift并进入而不是进入新行时,它提交了评论我试图输入更多,但它已提交,这就是为什么我的问题看起来如此普遍。 – user2127632