插件窝 干货文章 SQL删除行如何使用脚本

SQL删除行如何使用脚本

删除 DELETE WHERE SQL 730    来源:    2025-03-27

SQL 删除行操作指南

在SQL中,删除表中的行使用DELETE语句。以下是详细的使用方法和注意事项:

基本语法

DELETE FROM 表名
WHERE 条件;

示例

  1. 删除特定条件的行

    -- 删除员工表中部门为'HR'的所有员工
    DELETE FROM employees
    WHERE department = 'HR';
    
  2. 删除所有行(清空表)

    -- 删除orders表中的所有记录
    DELETE FROM orders;
    

    ⚠️ 注意:这会删除表中所有数据,但保留表结构

高级用法

  1. 使用子查询删除

    -- 删除30天内没有活动的用户
    DELETE FROM users
    WHERE user_id IN (
       SELECT user_id 
       FROM user_activity 
       WHERE last_active_date < DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)
    );
    
  2. 多表关联删除(不同数据库语法可能不同):

    • MySQL: sql DELETE t1 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id WHERE t2.status = 'inactive';
    • SQL Server: sql DELETE FROM table1 FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.id WHERE t2.status = 'inactive';
  3. 限制删除行数

    -- MySQL: 限制删除100行
    DELETE FROM log_entries
    WHERE created_at < '2020-01-01'
    LIMIT 100;
    
    -- SQL Server:
    DELETE TOP (100) FROM log_entries
    WHERE created_at < '2020-01-01';
    

注意事项

  1. 备份数据:执行DELETE前建议备份数据或先使用SELECT验证条件
  2. 事务处理:大批量删除时使用事务以便出错时回滚 sql BEGIN TRANSACTION; DELETE FROM large_table WHERE condition; -- 验证无误后 COMMIT; -- 或出错时 ROLLBACK;
  3. 性能考虑:删除大量数据时,分批删除或考虑使用TRUNCATE TABLE(当需要清空整个表时)
  4. 外键约束:注意表间的外键关系,可能需要先删除子表记录

替代方案

对于清空整个表,TRUNCATE TABLE通常比DELETE更快:

TRUNCATE TABLE table_name;

区别: - TRUNCATE是DDL操作,DELETE是DML操作 - TRUNCATE不能带WHERE条件 - TRUNCATE会重置自增计数器