从 table 中删除一个项目(行),但保留未使用的 ID 号以备将来插入
Delete an item (row) from table but keep the unused ID number for a future insertion
我有一个包含商店产品的 "inventory" table 的数据库。每个产品都使用 table 的 "ID" 列中设置的 ID 编号进行标识。
我希望能够从 table 中删除一个产品,但保留已删除产品的 ID 号,以便将来将产品插入到数据库中。
作为演示,我插入了 4 个项目并将它们全部命名为 "test"
举个例子,我将 "deleted" 产品命名为 "vacio"(西班牙语为空)以显示我删除的产品。
现在,如果以后要添加另一个产品,id 号 2 未使用,我想添加具有该 id 号而不是 4 的产品(按照给定的示例)。
DELETE 查询不好,因为它也删除了 ID 号,所以它不行。
我考虑过检查包含值 "vacio" 的 table 的第一行,并在除 id 之外的所有字段中使用 UPDATE 查询,但这感觉不到 "classy" 并且效率不高应该多次更新值。
有什么好的方法吗?
我实际上不建议重复使用旧标识符。首先,这会阻止您使用 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)。然后,要仅获取 "undeleted" 条记录,您只需按新列进行过滤即可。这样,您还可以防止将产品名称更改为 "vacio",这在将来可能会有用。
我有一个包含商店产品的 "inventory" table 的数据库。每个产品都使用 table 的 "ID" 列中设置的 ID 编号进行标识。 我希望能够从 table 中删除一个产品,但保留已删除产品的 ID 号,以便将来将产品插入到数据库中。 作为演示,我插入了 4 个项目并将它们全部命名为 "test"
举个例子,我将 "deleted" 产品命名为 "vacio"(西班牙语为空)以显示我删除的产品。
现在,如果以后要添加另一个产品,id 号 2 未使用,我想添加具有该 id 号而不是 4 的产品(按照给定的示例)。
DELETE 查询不好,因为它也删除了 ID 号,所以它不行。 我考虑过检查包含值 "vacio" 的 table 的第一行,并在除 id 之外的所有字段中使用 UPDATE 查询,但这感觉不到 "classy" 并且效率不高应该多次更新值。 有什么好的方法吗?
我实际上不建议重复使用旧标识符。首先,这会阻止您使用 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)。然后,要仅获取 "undeleted" 条记录,您只需按新列进行过滤即可。这样,您还可以防止将产品名称更改为 "vacio",这在将来可能会有用。