SQLite DELETE 语句
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 条件时,以免误删除所有数据。更多详细内容请关注其他相关文章。