Вставка данных в отдельные таблицы быстро и надежно - PullRequest
1 голос
/ 12 ноября 2010

Допустим, мы получаем следующие данные из CSV-файла:

account_number balance customer name
100            500.00  GERN BLANSTON
101            800.00  GERN BLANSTON
102            200.00  OPRAH WINFREY

Это две учетные записи, принадлежащие Герн Бланстон, и одна учетная запись, принадлежащая Опре Уинфри.Теперь предположим, что у нас есть таблица customer и таблица account.Мы могли бы гипотетически вставить данные, используя только два INSERT утверждения:

INSERT INTO customer
  (name)
VALUES
  ('GERN BLANSTON'),
  ('OPRAH WINFREY')

и

INSERT INTO account
  (account_number, balance, customer_id)
VALUES
  (100, 500.00, ???),
  (101, 800.00, ???),
  (102, 200.00, ???)

Если бы мы знали идентификаторы для Джерна Бланстона и Опры Уинфри, мы, конечно, могли быэти идентификаторы во втором операторе INSERT, и он будет работать нормально.Но так или иначе, нам нужно получить эти идентификаторы.

Мой вопрос: есть ли быстрый способ узнать или хотя бы отследить идентификаторы каждого добавленного клиента?Вставка каждой строки отдельно, а затем получение LAST_INSERT_ID() слишком медленное для меня (у меня до 65 000 учетных записей в каждом файле CSV).Поиск идентификатора клиента каждый раз, когда я вставляю новую учетную запись, также слишком медленный.

Или, если вы хотите обойти этот конкретный вопрос и порекомендовать другое решение, я тоже открыт для этого.Я использую MySQL.

1 Ответ

0 голосов
/ 12 ноября 2010

добавить еще один столбец для таблицы account, в которой хранится customer_name, после завершения вставки просто update account set customer_id=(select customer.customer_id from customer where customer.customer_name=account.customer_name;

надеюсь, что этот альтернативный обходной путь упростит сложность

также измените customer table на auto_increment для customer_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...