使用InnoDB使用外键创建和填充表

时间:2011-02-04 16:32:18

标签: mysql innodb

我有一个InnoDB表,其中列出了客户订单 - 此表记录了客户的电子邮件地址,订单的联系信息以及订单ID。该表使用innodb,包含大约2.2亿行。我没有的是一张列出用户的表格。

是否有可能(可能使用外键)为我创建并填充一个包含来自我的订单表中数据的customer_ide-mail地址的表格?

这是我到目前为止的查询:

INSERT INTO customers (email, last_order) 
  SELECT (email_address, order_date) FROM orders 
ON DUPLICATE KEY 
  UPDATE last_order = MAX(order_date, last_order);

我相信这个查询会构建数据库,但它不会将客户ID放入订单表的行中,我不确定这是否是最好的方法。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

您可以通过两个步骤实现这一目标:

1,填写customers表格:

INSERT INTO customers (email, last_order ) SELECT email_address, 
max(order_date) as last_order FROM orders GROUP by email_address;

2,用客户的ID更新orders表(假设customer_id表中有一个名为orders的字段)

UPDATE orders o SET customer_id = 
    (SELECT id FROM customers WHERE email = o.email_address);

最后,如果您希望保持customers表一致,可以在AFTER INSERT TRIGGER表中添加orders,以使您的customers表保持最新状态