Skip to content

常用的 sql 语句

清空数据库表数据

注意不会删除表, 但是会删除表内 所有数据

sql
-- 设置分隔符以支持存储过程
DELIMITER $$

-- 创建存储过程
CREATE PROCEDURE truncate_all_tables()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE tbl_name VARCHAR(255);
    DECLARE cur CURSOR FOR
        SELECT table_name
        FROM information_schema.tables
        WHERE table_schema = 'ocr'
          AND table_type = 'BASE TABLE';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    -- 禁用外键检查
    SET FOREIGN_KEY_CHECKS = 0;

    -- 打开游标并循环处理
    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO tbl_name;
        IF done THEN
            LEAVE read_loop;
        END IF;

        -- 动态生成并执行 TRUNCATE
        SET @sql = CONCAT('TRUNCATE TABLE `', tbl_name, '`;');
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END LOOP;

    -- 清理和恢复设置
    CLOSE cur;
    SET FOREIGN_KEY_CHECKS = 1;
END$$

-- 恢复默认分隔符
DELIMITER ;

-- 调用存储过程
CALL truncate_all_tables();

-- 删除存储过程(可选)
DROP PROCEDURE truncate_all_tables;

最后更新于: