对于有经验的人来说,这可能是一个非常简单的问题,但我只想知道在SQL表中删除几百条记录的最安全方法。这些记录落在特定范围内。
例如,我需要删除ID在79和296之间的行:
我担心如果我说删除所有ID大于79且小于296的记录,那么它可能会删除整个表。
对于有经验的人来说,这可能是一个非常简单的问题,但我只想知道在SQL表中删除几百条记录的最安全方法。这些记录落在特定范围内。
例如,我需要删除ID在79和296之间的行:
我担心如果我说删除所有ID大于79且小于296的记录,那么它可能会删除整个表。
如果你使用 Sql Server
delete from Table where id between 79 and 296
注意:between
语句是包含的,因此行79
和296
也将被删除。
编辑后:您现在澄清了您想要的查询条件:
ID(>79 AND < 296)
因此,请使用以下语句:
delete from Table where id > 79 and id < 296
ID (>79 AND < 296)
,这将删除 ID (>= 79 AND <= 296)
,当然这可能不是一个精确的问题 :-)。 - Michał Powaga如果给定的条件ID是(> 79且<296),则答案为:
delete from tab
where id > 79 and id < 296
这与以下代码等效:
delete from tab
where id between 80 and 295
如果 id
是整数。
所有答案:
delete from tab
where id between 79 and 296
这与以下代码等价:
delete from tab
where id => 79 and id <= 296
注意区别。
delete from tab where id => 79 OR id <= 296
- 注意使用 OR
而不是 AND
,这将使它等同于分别运行两个查询。如果 ID 是非空整数,则确实会删除所有内容。如果 ID 可以为 NULL
,则这些行将保留。 - KonerakDELETE FROM table_name
WHERE id BETWEEN 79 AND 296;
你也可以将删除操作改为选择所有 (*)
并测试你的选择
所选记录将与已删除的记录相同
如果不确定,你还可以在语句中加入 BEGIN / ROLLBACK - 先测试语句,如果一切正常再移除回滚
例如:
SELECT * FROM table WHERE id BETWEEN 79 AND 296
将显示所有匹配 WHERE 的记录 如果它们是你“真正”想要删除的,则使用
DELETE FROM table WHERE id BETWEEN 79 AND 296
你还可以创建一个触发器/捕获删除并将其放入历史表中
因此,如果你误删了某些内容,你总是可以找回来
(保持历史表记录不超过6个月或任何业务规则规定的时间)
delete * from Table1 where id between 70 and 1296
这样的语句,SQL查询处理器首先会扫描表格并查找该范围内的记录,然后应用删除操作。如果您在SQL Server中按照以下方式编写,则不会有清除数据库表的危险,除非该表中的所有值实际上都在这些值之间:
DELETE FROM [dbo].[TableName] WHERE [TableName].[IdField] BETWEEN 79 AND 296
你可以使用这种方式,因为在某些情况下id可能不是连续的。
SELECT *
FROM `ht_news`
LIMIT 0 , 30