Mysql 使用InnoDB创建并填充带有外键的表

Mysql 使用InnoDB创建并填充带有外键的表,mysql,innodb,Mysql,Innodb,我有一个InnoDB表,其中列出了客户订单——该表记录了客户的电子邮件地址、订单的联系信息和订单id。该表使用InnoDB,包含大约2.2亿行。我没有的是一个列出用户的表 我是否可以使用外键创建并填充一个表,该表将包含来自“我的订单”表中数据的客户id和电子邮件地址 这是我到目前为止提出的问题: INSERT INTO customers (email, last_order) SELECT (email_address, order_date) FROM orders ON DUPLI

我有一个InnoDB表,其中列出了客户订单——该表记录了客户的电子邮件地址、订单的联系信息和订单id。该表使用InnoDB,包含大约2.2亿行。我没有的是一个列出用户的表

我是否可以使用外键创建并填充一个表,该表将包含来自“我的订单”表中数据的
客户id
电子邮件
地址

这是我到目前为止提出的问题:

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放入orders表中的行中,而且我不确定这是否是最好的开始方法。有什么建议吗?

您可以通过两个步骤实现:

首先,填写
客户
表:

INSERT INTO customers (email, last_order ) SELECT email_address, 
max(order_date) as last_order FROM orders GROUP by email_address;
第二,使用客户id更新
orders
表(假设
orders
表中有一个名为
customer\u id
的字段)


最后,如果您想保持
客户
表的一致性,可以在
订单
表中添加一个
插入触发器后
,以保持
客户
表的最新状态。

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

首先,填写
客户
表:

INSERT INTO customers (email, last_order ) SELECT email_address, 
max(order_date) as last_order FROM orders GROUP by email_address;
第二,使用客户id更新
orders
表(假设
orders
表中有一个名为
customer\u id
的字段)


最后,如果您想保持
客户
表的一致性,可以在
订单
表中添加一个
后插入触发器
,使
客户
表保持最新状态。

如果没有失败,我觉得不错。如果没有失败,我觉得不错。