SQLite DELETE 语句
                           
天天向上
发布: 2025-03-04 08:41:01

原创
653 人浏览过

DELETE 语句用于从 SQLite 数据库中的表中删除一条或多条记录。可以根据指定的条件删除记录,或者不加条件删除所有记录。

语法

DELETE FROM table_name
WHERE condition;
  • table_name: 需要删除数据的表名。
  • WHERE: 可选的条件子句,指定哪些记录将被删除。没有 WHERE 子句时,表中的所有记录都会被删除。

1. 基本用法

示例:

DELETE FROM employees
WHERE employee_id = 1;
  • 该查询删除 employee_id 为 1 的员工记录。

2. 删除多个记录

可以使用条件删除多个记录,例如删除符合某些条件的员工记录。

示例:

DELETE FROM employees
WHERE department = 'IT';
  • 该查询删除所有属于 IT 部门的员工记录。

3. 删除所有记录

如果没有 WHERE 子句,DELETE 语句将删除表中的所有记录,但表结构和表的约束(如主键)将保留。

示例:

DELETE FROM employees;
  • 该查询删除 employees 表中的所有记录。

4. 使用子查询删除记录

你可以使用子查询来删除符合特定条件的记录。

示例:

DELETE FROM employees
WHERE department = (SELECT department FROM departments WHERE department_id = 3);
  • 该查询删除所有 department 字段与 departments 表中 department_id 为 3 的部门相同的员工记录。

5. 删除重复记录

如果表中有重复的记录,你可以通过适当的条件删除多余的记录,通常需要使用 ROWID 或其他标识符来区分重复项。

示例:

DELETE FROM employees
WHERE ROWID NOT IN (SELECT MIN(ROWID) FROM employees GROUP BY name);
  • 该查询删除 employees 表中 name 重复的记录,仅保留每个 name 对应的第一条记录。

6. 删除与外键约束

当删除记录时,如果该记录在其他表中存在外键引用(例如,通过外键关联的子表),并且启用了外键约束,那么删除操作可能会受到限制,导致外键约束错误。为了避免这种情况,可以使用 ON DELETE CASCADE 来自动删除相关记录,或者手动删除子表中的相关记录。

示例:

DELETE FROM employees
WHERE department = 'HR';
  • 如果 employees 表与其他表(如 employee_salaries)通过外键关联,且启用了外键约束,删除 employees 表中的记录时,相关的 employee_salaries 记录也会被自动删除(前提是设置了 ON DELETE CASCADE)。

7. 使用事务删除记录

为了确保删除操作的原子性(即要么所有删除操作成功,要么都不进行),可以使用事务。

示例:

BEGIN TRANSACTION;

DELETE FROM employees
WHERE department = 'IT';

DELETE FROM employees
WHERE department = 'HR';

COMMIT;
  • 该查询通过事务确保删除 IT 部门和 HR 部门的所有员工记录。如果其中一个删除操作失败,事务将回滚,确保数据的一致性。

总结

  • DELETE 语句用于删除表中的记录。
  • 使用 WHERE 子句来指定删除哪些记录。如果没有 WHERE 子句,所有记录都会被删除。
  • 可以使用子查询、条件和事务来控制删除操作。
  • 使用外键约束时,删除记录时可能会影响到其他表中的数据,可以通过 ON DELETE CASCADE 设置来自动删除相关记录。

删除记录时请小心操作,特别是没有 WHERE 条件时,以免误删除所有数据。更多详细内容请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *