2013-05-16 35 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

相关问题