我有一个带有“库存”表的数据库,其中包含商店的产品。使用在表的“ ID”列中设置的ID数字标识每个产品。我希望能够从表中删除产品,但保留已删除产品的ID号,以供将来将产品插入数据库中。作为演示,我插入了4个项目并将其全部命名为“ test”
作为一个例子,我将“已删除”的产品命名为“ vacio”(西班牙语为空,以显示我删除的产品。
[现在,如果以后要添加其他产品,则ID号2尚未使用,我想添加该ID号而不是4的产品(按照给出的示例)。
DELETE查询是不好的,因为它也删除了ID号,因此是不可行的。我考虑过检查包含值“ vacio”的表的第一行,并在除id之外的所有字段中使用UPDATE查询,但这并没有“经典”的感觉,并且效率不高,因为它必须大量更新值次。有一些不错的方法吗?
我实际上不建议重用旧的标识符。首先,这使您无法使用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)
您可能有一个新列ESTADO,如果记录是活动的(1)或不活动的(0),您将在其中处理。然后,仅获取“未删除”记录,您只需按新列进行过滤。这样,您还可以防止将产品名称更改为“ vacio”,这在将来可能会有用。