好的,阿杰,我给你整理一份 truncate 用法详解,涵盖 SQL、Python、Linux 等常见场景,方便你快速理解和使用。


1. SQL 中的 TRUNCATE

功能

  • 用于 快速清空表中的所有数据,但 保留表结构
  • 通常比 DELETE FROM table 更快,因为 TRUNCATE 不会逐行删除,也不记录每行删除日志(取决于数据库)。

基本语法

TRUNCATE TABLE table_name;

特点

  1. 删除所有行,但 保留表结构、索引和约束
  2. 不可回滚(某些数据库除外,如 PostgreSQL 可回滚事务)。
  3. 重置自增字段(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 不创建文件