从表中删除项目(行),但保留未使用的ID号以备将来插入时使用

问题描述 投票:0回答:2

我有一个带有“库存”表的数据库,其中包含商店的产品。使用在表的“ ID”列中设置的ID数字标识每个产品。我希望能够从表中删除产品,但保留已删除产品的ID号,以供将来将产品插入数据库中。作为演示,我插入了4个项目并将其全部命名为“ test”

enter image description here

作为一个例子,我将“已删除”的产品命名为“ vacio”(西班牙语为空,以显示我删除的产品。

enter image description here

[现在,如果以后要添加其他产品,则ID号2尚未使用,我想添加该ID号而不是4的产品(按照给出的示例)。

DELETE查询是不好的,因为它也删除了ID号,因此是不可行的。我考虑过检查包含值“ vacio”的表的第一行,并在除id之外的所有字段中使用UPDATE查询,但这并没有“经典”的感觉,并且效率不高,因为它必须大量更新值次。有一些不错的方法吗?

sql python-3.x sqlite sql-insert sql-delete
2个回答
0
投票

我实际上不建议重用旧的标识符。首先,这使您无法使用auto_increment功能,这意味着您需要为每个插入手动处理该列:这增加了复杂性,并且效率不高。另外,如果您还有其他引用产品ID的表,则可能会导致数据库中的完整性问题。

但是如果您真的想那样做:我会选择删除选项。如果有引用该列的外键,请确保已启用on delete cascade选项,以便在删除产品时从相关表中正确清除数据。

然后,下次使用以下查询创建新产品时,您可以填补第一个可用的空白:

insert into products(id, categoria, producto)
select min(id) + 1, 'my new category', 'my new product'
from products p
where not exists (select 1 from products p1 where p1.id = p.id + 1)

0
投票

您可能有一个新列ESTADO,如果记录是活动的(1)或不活动的(0),您将在其中处理。然后,仅获取“未删除”记录,您只需按新列进行过滤。这样,您还可以防止将产品名称更改为“ vacio”,这在将来可能会有用。

© www.soinside.com 2019 - 2024. All rights reserved.