Создание и заполнение таблицы внешними ключами с использованием InnoDB - PullRequest
1 голос
/ 04 февраля 2011

У меня есть таблица InnoDB, в которой перечислены заказы клиентов - в эту таблицу записываются адрес электронной почты клиента, контактная информация для заказа и идентификатор заказа. Эта таблица использует innodb и содержит примерно 220 миллионов строк. Что у меня нет, так это таблица со списком пользователей.

Возможно ли, возможно, использование внешних ключей, чтобы я создал и заполнил таблицу, которая будет содержать адрес customer_id и e-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);

Я полагаю, что этот запрос создаст базу данных, но он не будет помещать идентификатор клиента в строку таблицы заказов, и я не уверен, что это лучший подход для начала. Есть предложения?

1 Ответ

4 голосов
/ 04 февраля 2011

Вы можете достичь этого за 2 шага:

1-й, заполните таблицу customers:

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

2-е, обновите таблицу orders, указав идентификаторы клиентов (при условии, что в таблице orders есть поле с именем customer_id)

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

Наконец, если вы хотите, чтобы ваша таблица customers была согласованной, вы можете добавить AFTER INSERT TRIGGER к таблице orders, чтобы ваша таблица customers была актуальной.

...