更新sql表当前行

时间:2016-06-21 01:49:43

标签: mysql max row

完成noob警报!我需要为我测量的许多设备存储一组较大的数据字段(480)。每个字段都是十进制(8,5)。首先,这是一张不合理的大桌子吗?我真的没有经验,所以如果它无法管理,我可能会开始考虑另一种存储方法。

现在,我正在使用INSERT创建一个新行,然后尝试使用UPDATE(在循环中)将480个数据值放入新行。目前,每个UPDATE都会覆盖整个列。如何仅指定修改最后一行?例如,一个表(“幅度”)具有列“id”,“field1”,“field2”,......:

sql UPDATE magnitude SET field1 = 3.14;这会修改整个“field1”列。

尝试做类似的事情: sql UPDATE magnitude SET field1 = 3.14 WHERE id = MAX(id)

显然我是一个完整的菜鸟。只是试图让这一件事起作用并继续前进......看了很多但却无法找到解决方案。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您应该使用insert命令一次插入一行,并使用填充值插入一行,而不是插入行然后使用值更新它。

即。

insert into tTable (column1, column2, ..., column n) values (datum1, datum2, ..., datum n)

您的表格定义应该包含属性identity的ID列,这意味着它会在您插入时为您自动填充,即您不需要指定它。

回复:架构的恰当性,我认为480是大量的列。但是,这是一个直截了当的例子,您可以尝试并根据经验确定您的系统是否能够为您提供所需的性能。

如果我自己这样做,我会选择一个有很多行而不是很多列的不同解决方案:

创建表格tDevice (ID int, Name nvarchar)

创建表格tData (ID int, Device_ID int, Value decimal(8,5))

- 将Device_ID上的外键返回tDevice.ID

然后,填充:

将所有设备插入tDevice

为每个设备/数据组合在tData中插入一行 - 即480 x n行,n是设备数量

然后,您可以查询所需的数据:

select * from tData join tDevice on tDevice.ID = tData.Device_ID