sql - 如何截断 MySQL 数据库中的所有表?

标签 sql mysql stored-procedures truncate

有没有什么方法可以在不使用除 SQL 之外的任何其他语言的情况下截断特定 MySQL 数据库名称中的所有表?我的意思是没有 linux shell 脚本。 (为什么?因为它将在 Windows、MacOSX 和 Linux 服务器上运行)。

问题是客户端从控制面板网页的列表中选择数据库名称(将显示来自不同服务器 *nix 和 windows 的 MySQL 数据库),然后他将想要截断其中的所有表数据库(是的,这是网络表单的主要任务)。

亚历克斯

最佳答案

好的,我自己解决了这里是存储过程:)

BEGIN
    DECLARE done BOOLEAN DEFAULT FALSE; 
    DECLARE truncatestmnt TEXT; -- this is where the truncate statement will be retrieved from cursor

    -- This is the magic query that will bring all the table names from the database
    DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName";
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE; 

    OPEN c1;

    c1_loop: LOOP
    FETCH c1 INTO truncatestmnt;
    IF `done` THEN LEAVE c1_loop; END IF;
        SET @x = truncatestmnt;
        PREPARE stm1 FROM @x;
        EXECUTE stm1;
    END LOOP c1_loop; 

    CLOSE c1;
END

我正在调用给定数据库中的所有表,如果给定数据库中的表没有可遵循的模式,这将有所帮助。

因此,通过调用 DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName"; 并将结果保存到游标中我可以获取由给定数据库内的“n”个表生成的所有 TRUNCATE TABLE x 语句,然后通过准备和执行游标中的每个语句,它将截断给定数据库内的所有表.

BTW @DatabaseName must be given as parameter to the stored procedure

希望这对其他人也有帮助:)

亚历克斯

关于sql - 如何截断 MySQL 数据库中的所有表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4756430/

相关文章:

sql - 使用 Groovy SQL 计算受影响的行数

PHP MySQL 并发

mysql - SQL 查询 - 需要帮助构建

tsql - 如何在动态 SQL 中处理从 OpenQuery 调用到链接分析服务器的空结果集?

需要 Mysql 存储函数帮助

sql - 'like' 和困惑的 MySQL 查询问题

SQL 从数据库中删除前导连字符 (-) 并删除连续的空格

sql - 使用 Access 存储用户名和密码并通过 Visual Basic 打开

mysql 5.5命令行客户端错误1366 HY000 :incorrect string value:'\xD3\xE3\xC0

python - 错误 : 1318 Incorrect number of arguments for PROCEDURE | Flask