2013-03-31 151 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