Mysql 使用InnoDB创建并填充带有外键的表
我有一个InnoDB表,其中列出了客户订单——该表记录了客户的电子邮件地址、订单的联系信息和订单id。该表使用InnoDB,包含大约2.2亿行。我没有的是一个列出用户的表 我是否可以使用外键创建并填充一个表,该表将包含来自“我的订单”表中数据的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
客户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
的字段)
最后,如果您想保持
客户
表的一致性,可以在订单
表中添加一个后插入触发器
,使客户
表保持最新状态。如果没有失败,我觉得不错。如果没有失败,我觉得不错。