在数据库中,删除数据时,一般人都是直接写DELETE FROM [table] WHERE XXX=XXX
,正常情况是没啥大问题的,只要WHERE
条件不要写错了,但是有时候就是不小心失误,导致出现大问题,本人曾经就手贱过,一不小心就差点来个删表跑路了,还好有备份 [捂脸]。从此以后我在删除数据时就会尽量遵守如下规则:
【delete规则(强烈建议)】
强烈建议在删除数据时,如果知道要删除的数据条数,请显示的指明删除的数据条数,哪怕明知道删除的数据只有1条,也请指定删除数据的条数,如果不知道要删除的条数,那就预估一下要删除数据条数的上限,填写该上限值。mysql
和sqlserver
都支持,不过还是有点区别的,具体如下:
【带来的好处】
- 降低失误的可能,因为最多也只会删除指定条数的数据,减小误删数据的范围,降低带来的隐患;
- 提升性能,指定条数后,一旦数据库引擎删除的条数达到指定值后,就会停止往下执行,避免多余的消耗;
【mysql】
-- 按默认排序,删除1条数据
DELETE FROM tableName WHERE xxx=xxx LIMIT 1;
-- 按指定的排序,删除1条数据
DELETE FROM tableName WHERE xxx=xxx ORDER BY DESC id LIMIT 1;
【sqlserver】
-- 按默认排序,删除1条数据
DELETE TOP (1) FROM tableName WHERE xxx=xxx;
sqlserver
不支持在delete
中添加order by
排序信息,所以如果需要按指定排序进行指定条数的数据删除,只能用如下方法了。
-- 按指定的排序,删除1条数据
DELETE FROM tableName
WHERE id IN (SELECT TOP (1) id FROM tableName WHERE xxx=xxx ORDER BY id DESC);
【其它】
如果是删除全表数据,请不要用delete
,请尽量使用TRUNCATE TABLE tableName
。