好的,阿杰,我给你整理一份 truncate
用法详解,涵盖 SQL、Python、Linux 等常见场景,方便你快速理解和使用。
1. SQL 中的 TRUNCATE
功能
- 用于 快速清空表中的所有数据,但 保留表结构。
- 通常比
DELETE FROM table
更快,因为TRUNCATE
不会逐行删除,也不记录每行删除日志(取决于数据库)。
基本语法
TRUNCATE TABLE table_name;
特点
- 删除所有行,但 保留表结构、索引和约束。
- 不可回滚(某些数据库除外,如 PostgreSQL 可回滚事务)。
- 重置自增字段(AUTO_INCREMENT):
TRUNCATE TABLE users; -- users.id 自增计数器重置
示例
-- 创建表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
-- 插入数据
INSERT INTO users (name) VALUES ('Alice'), ('Bob');
-- 清空表
TRUNCATE TABLE users;
注意:如果有外键约束,某些数据库不允许直接 TRUNCATE,需要先删除约束或使用
DELETE
。
2. Python 中 truncate() 方法
Python 中有 文件对象的 truncate()
方法,用于 截断文件。
功能
- 截断文件到指定长度。
- 默认截断到 当前位置(文件指针位置)。
基本语法
file.truncate(size=None)
size
:可选,截断后的文件大小(字节)。- 返回值:
None
。
示例
# 创建一个示例文件
with open("example.txt", "w") as f:
f.write("Hello, world!")
# 截断文件到前5个字符
with open("example.txt", "r+") as f:
f.truncate(5)
# 查看文件内容
with open("example.txt", "r") as f:
print(f.read()) # 输出: Hello
注意事项
- 如果
size
大于原文件大小,不会填充空格或数据。 truncate()
只对 打开模式支持写操作的文件 有效(如"r+"
,"w"
,"a+"
)。
3. Linux/Unix 中 truncate 命令
功能
- 在命令行下 创建或调整文件大小。
基本语法
truncate -s <size> filename
-s
:设置文件大小,可以带 K、M、G 后缀。
示例
# 创建一个空文件,大小为10MB
truncate -s 10M file.bin
# 截断已有文件到 1KB
truncate -s 1K example.txt
常用选项
选项 | 作用 |
---|---|
-s SIZE | 设置文件大小 |
-c | 不创建文件,如果不存在则报错 |
–reference=FILE | 参考另一个文件的大小 |
总结对比
场景 | 功能 | 注意事项 |
---|---|---|
SQL TRUNCATE | 快速清空表数据,保留表结构 | 不支持部分行删除,外键限制 |
Python file.truncate() | 截断文件到指定长度 | 需要文件支持写入模式,size 可选 |
Linux truncate | 创建或截断文件,指定大小 | 可使用 K/M/G 单位,-c 不创建文件 |
发表回复