我有一个表,我希望刷新现有的信息而不创建新的信息(除非一个条目已经不存在)。这是在股票的背景下。其中一个字段是股票代码。我有一个python程序,它运行在一个股票代码列表中并获取更新的数据。例如,如果$mmm的市值从2000亿美元变为3000亿美元,我将使用什么语法来确保sql找到$mmm的现有行,并在不创建新行的情况下更新现有信息?
sy5wg1nm1#
这听起来像 insert . . . on duplicate key update . 不过,首先需要一个唯一的索引或约束:
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);
thigvfpy2#
更新查询无法创建新行,因此可能类似于:
UPDATE stocks SET marketcap = 300000000000 WHERE symbol = '$MMM'
您的脚注“除非它不存在”意味着您可能需要检查更改了多少行,如果是0,则运行:
INSERT INTO stocks(marketcap, symbol) VALUES(300000000000, '$MMM')
你怎么做并不重要;如果你有一个键在符号上,你不会得到重复的,你会得到一个失败插入,然后你可以用它来触发一个更新。理想情况下,你应该考虑每种方法失败的可能性,并选择将最不常失败的方法放在第一位。如果你每天要更新10000个符号100次,但每天只插入100个新符号,那么就先更新。如果您要每天创建10000个新符号并每年更新一次,请先插入。这样可以确保在由于引发错误而对资源没有影响/使用的操作上浪费的时间最少
2条答案
按热度按时间sy5wg1nm1#
这听起来像
insert . . . on duplicate key update
. 不过,首先需要一个唯一的索引或约束:然后您可以使用:
thigvfpy2#
更新查询无法创建新行,因此可能类似于:
您的脚注“除非它不存在”意味着您可能需要检查更改了多少行,如果是0,则运行:
你怎么做并不重要;如果你有一个键在符号上,你不会得到重复的,你会得到一个失败插入,然后你可以用它来触发一个更新。理想情况下,你应该考虑每种方法失败的可能性,并选择将最不常失败的方法放在第一位。如果你每天要更新10000个符号100次,但每天只插入100个新符号,那么就先更新。如果您要每天创建10000个新符号并每年更新一次,请先插入。这样可以确保在由于引发错误而对资源没有影响/使用的操作上浪费的时间最少