2013-05-16 68 views
1

我遇到了這種情況。我想插入一個新的行到表中有一個外鍵約束到另一個表。當我插入一個新的行時,我有從用戶輸入中獲取的新值,除了要從父表中獲取的外鍵列。而外鍵是父表中的auto_increment主鍵。這裏是一個最小化的模式來說明,只顯示相關的列。Mysql:在子表中插入一個新行,除了從父表獲得的外鍵列以外的新值

CREATE TABLE CUSTOMER (
    CUSTOMER_CODE INTEGER NOT NULL AUTO_INCREMENT, 
    FIRST_NAME VARCHAR (20) NOT NULL, 
    EMAIL VARCHAR (50) UNIQUE NOT NULL, 
     . 
    . 
    . 


    PRIMARY KEY (CUSTOMER_CODE) 
); 

CREATE TABLE BOOKING ( 
    BOOKING_CODE INTEGER NOT NULL AUTO_INCREMENT, 
    CUSTOMER_CODE INTEGER NOT NULL, 
    BOOKING_DATE DATE NOT NULL, 
    . 
    . 
    . 

    PRIMARY KEY (RESERVATION_CODE), 
    CONSTRAINT BOOKING_CUSTOMER_FK FOREIGN KEY (CUSTOMER_CODE) REFERENCES CUSTOMER 
                     (CUSTOMER_CODE) 
); 

我想知道(如booking_date)insert語句,將基於該系統的列的其餘部分的用戶交互與生成的值送入預訂表中的新行,但獲得來自該customer_code客戶表與where email=子句與從用戶輸入獲得的電子郵件。

+0

在更廣泛的上下文中,您的應用程序會有一些登錄設施,您可能會要求他提供登錄憑據。只需將這些憑據保存在會話中即可。之後,你可以查詢數據庫的用戶身份的xyz獨特的電子郵件。現在你擁有所有的價值。繼續吧。插入記錄。 – ankurtr

+0

@ ankur.trapasiya這就是我要求的...插入語句 – Obby

+0

的語法插入到預定值(....,12,....)。這裏是來自會話的客戶ID。 – ankurtr

回答

1

要結合2個語句可以用INSERT ... SELECT這樣的:

INSERT INTO 
    BOOKING 
    (CUSTOMER_CODE, BOOKING_DATE) 
SELECT 
    CUSTOMER_CODE, $booking_date 
FROM 
    CUSTOMER 
WHERE 
    CUSTOMER.email=$email 

你把你的價值觀爲SELECT作爲硬編碼以及相應的電子郵件獲取CUSTOMER_CODE。但請確保您的SQL注入受到保護。

+0

這就是我正在做的。但我想知道是否有一種方法可以使用一個聲明。我使用JDBC連接器j,但我收到異常,但是當我使用msql.exe在CLI上執行它時,它工作正常。 – Obby

+0

我怎麼能結合這兩個陳述? – Obby

+0

@ user1788917我更新了答案。 – user4035

相關問題