Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 移动整个按键范围_Mysql_Time Series_Dst_On Duplicate Key - Fatal编程技术网

Mysql 移动整个按键范围

Mysql 移动整个按键范围,mysql,time-series,dst,on-duplicate-key,Mysql,Time Series,Dst,On Duplicate Key,我正在处理时间序列数据,其关键列是时间戳:time。 每行也有许多“值”列 由于夏令时的问题,我将把我的整个数据范围移动几个小时。 为此,我将更新几行的键,这可能会导致一些重复的键。我想重复的日期范围边缘的关键是忽略。我想让移位的范围覆盖旧的范围 我计划做如下事情: UPDATE IGNORE time_series_table SET time=time-<some_shift> WHERE <time in a date-range> 我的问题是:它会一次移动所

我正在处理时间序列数据,其关键列是时间戳:time。 每行也有许多“值”列

由于夏令时的问题,我将把我的整个数据范围移动几个小时。 为此,我将更新几行的键,这可能会导致一些重复的键。我想重复的日期范围边缘的关键是忽略。我想让移位的范围覆盖旧的范围

我计划做如下事情:

UPDATE IGNORE time_series_table 
SET time=time-<some_shift> 
WHERE <time in a date-range>
我的问题是:它会一次移动所有的关键点,还是会尝试一行一行地移动,从而在移动的范围内产生大量重复的关键点

你有没有更好的办法? 提前谢谢

它会一次移动所有键,还是会尝试一行一行地移动

它将同时移动所有键

在移动范围内产生大量重复的关键点

如果主键中的任何一个重复,则它将失败。
使用
update ignore
,它只是默默地跳过

这是我解决这个问题的方法

/* create a temporary table to store matches records*/
create table tmp_table select time-<some_shift>, etc_cols....
from time_series_table 
where <time in a date-range>;

你说的时间戳是指时间戳字段类型还是实际的整数?第二,这是唯一的钥匙吗?descripe或showcreate表的输出将很有帮助。我在问题中添加了descripe的输出。无论如何昨天我得到了一个很好的答案:它是关于使用一个临时表来复制这个表,并使用“REPLACE”/“ignore”。我本来打算投赞成票的,但今天没有通知就没了。这可能是SO的错误或作者出于某种原因删除了它。表使用的是什么引擎?是InnoDB吗?
/* create a temporary table to store matches records*/
create table tmp_table select time-<some_shift>, etc_cols....
from time_series_table 
where <time in a date-range>;
/* delete the matches in the original table */
delete from time_series_table where <time in a date-range>;
delete from time_series_table where <time in a date-range - some_shift>;
/* at this point, there won't be any duplicate data */
/* so, insert back into original table */
insert into time_series_table select * from tmp_table;
optmize table time_series_table;