SQL - Заменить запись на основе одного поля - PullRequest
0 голосов
/ 01 августа 2020

У меня есть таблица, в которой я хочу обновить sh существующую информацию без создания новой информации (если запись еще не существует).

Это в контексте акций. Одно из полей - тикер. У меня есть программа python, которая просматривает список тикеров и получает обновленные данные.

Если, например, рыночная капитализация $ MMM изменилась с 200 млрд долларов на 300 млрд долларов, какой синтаксис я бы использовал для убедиться, что SQL находит существующую строку для $ MMM и обновляет существующую информацию без создания новой строки?

Ответы [ 2 ]

0 голосов
/ 01 августа 2020

Это звучит как insert . . . on duplicate key update. Однако сначала вам понадобится уникальный индекс или ограничение:

create unique index unq_stocks_ticker on stocks(ticker);

Затем вы можете использовать:

insert into stocks (ticker, marketcap)
    values (?, ?)
    on duplicate key update marketcap = values(marketcap);
0 голосов
/ 01 августа 2020

Запрос UPDATE не может создать новую строку, поэтому, возможно, примерно так:

UPDATE stocks SET marketcap = 300000000000 WHERE symbol = '$MMM' 

Ваша сноска «если она не существует» означает, что вам, вероятно, потребуется проверить, сколько строк было изменено, и если 0, то запустите:

INSERT INTO stocks(marketcap, symbol) VALUES(300000000000, '$MMM')

На самом деле не имеет значения, в каком направлении вы это делаете; если у вас есть ключ на символе, вы не получите дубликатов, вы получите ошибку при вставке, которую затем можете использовать для запуска обновления. Хотя в идеале вы должны посмотреть на вероятность отказа каждого из них и go с возможностью поставить на первое место наименее часто сбойный вариант. Если вы будете обновлять 10000 символов по 100 раз в день каждый, но вставлять только 100 новых символов в день, то сначала установите обновление. Если вы будете создавать 10000 новых символов в день и обновлять их раз в год, вставьте вставку на первое место. Это гарантирует, что наименьшее количество времени будет потрачено на операции, которые не влияют / используют ресурсы, потому что они вызывают ошибку

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