更新SQL表中所选数据中的列并将其保存
我有一个名为更新SQL表中所选数据中的列并将其保存,sql,postgresql,sql-update,Sql,Postgresql,Sql Update,我有一个名为datatable的SQL表 date source reading tday yday --------------------------------------------- 2021-05-27 x1 x x x 2021-05-27 x2 x x x 2021-05-27 x3 x x x 2021-
datatable
的SQL表
date source reading tday yday
---------------------------------------------
2021-05-27 x1 x x x
2021-05-27 x2 x x x
2021-05-27 x3 x x x
2021-05-28 x1 x x x
2021-05-28 x2 x x x
2021-05-28 x3 x x x
2021-05-31 x1 x x x
2021-05-31 x2 x x x
2021-05-31 x3 x x x
我想将日期从2021-05-31
更新到2021-06-01
,我只有一个数据库,我担心数据会弄乱,我该怎么做
应该是这样的
date source reading tday yday
----------------------------------------------
2021-05-27 x1 x x x
2021-05-27 x2 x x x
2021-05-27 x3 x x x
2021-05-28 x1 x x x
2021-05-28 x2 x x x
2021-05-28 x3 x x x
2021-06-01 x1 x x x
2021-06-01 x2 x x x
2021-06-01 x3 x x x
我想应该是这样的
UPDATE date
FROM datatable
WHERE date = '2021-05-31' TO '2021-06-01';
或
日期列是日期时间格式
编辑
如何先添加数据,然后删除旧数据
同样,将2021-05-31中的数据复制为2021-06-01(除日期外,所有其他列都是2021-05-31数据中的列)
然后删除2021-05-31所在的行,以
对于这一点,我猜查询将是:
DELETE FROM datatable
WHERE date = '2021-05-31';
为了获得最安全的结果,请按照管理员数据库解决方案对没有主键的表执行的操作: 更新datatable SET date=“new date”其中date=“old date”和source=“previous source”以及reading=“previous reading”和其他字段 但是,为了让您的生活更轻松,我建议添加id列(自动递增和主键),并使用以下方法更新数据:
更新您的更新查询…。其中id=“target id”您的第二次示例更新符合您的要求 但你是对的,这样的更新可能是破坏性的。许多具有像您这样的数据的系统在有新的一天数据时不会更新其表。相反,它们向表中插入新行,以便表保存历史记录 如果你担心你的桌子会变得多大,不要担心。数据库擅长处理大型表,尤其是您向我们展示的那种。在某种维护工作中,您总是可以删除超过几年的数据
如果我了解您的数据,您可以使用由
日期
和源
列组成的复合主键。如何在删除旧数据之前先添加新行作为更新?首先添加新ID列:ALTER TABLE datatable add ID INT,然后将其标记为主键:ALTERTABLE datatable ADD primary key idI强烈建议您也阅读有关ALTERTABLE语句的更多信息,谷歌it;)现在我的意思是,等等,我会更新问题请看一看,我能做一个合成吗?我认为它必须是独一无二的你能看看这个问题吗?
date source reading tday yday
---------------------------------------------
2021-05-27 x1 x x x
2021-05-27 x2 x x x
2021-05-27 x3 x x x
2021-05-28 x1 x x x
2021-05-28 x2 x x x
2021-05-28 x3 x x x
2021-05-31 x1 x x x
2021-05-31 x2 x x x
2021-05-31 x3 x x x
2021-06-01 x1 x x x
2021-06-01 x2 x x x
2021-06-01 x3 x x x
DELETE FROM datatable
WHERE date = '2021-05-31';
date source reading tday yday
--------------------------------------------
2021-05-27 x1 x x x
2021-05-27 x2 x x x
2021-05-27 x3 x x x
2021-05-28 x1 x x x
2021-05-28 x2 x x x
2021-05-28 x3 x x x
2021-06-01 x1 x x x
2021-06-01 x2 x x x
2021-06-01 x3 x x x