1

我有这种情况。我想在对另一个表有外键约束的表中插入一个新行。当我插入新行时,除了要从父表获取的外键列之外,我从用户输入中获得了新值。并且外键是父表中的 auto_increment 主键。这是一个最小化的模式来说明,只显示了相关的列。

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 表提供一个新行,该行具有基于用户与系统的交互为其余列(如booking_date)生成的值,但从customer_code客户表中获取where email=带有获得电子邮件的子句从用户输入。

4

1 回答 1

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 注入的影响。

于 2013-05-16T10:30:12.657 回答