MySQL:IF EXISTS ... TRUNCATE

时间:2015-12-03 10:07:50

标签: mysql

如果表存在,则要截断表:

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'mytable') TRUNCATE mytable

错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   在' IF EXISTS附近(从INFORMATION_SCHEMA.TABLES中选择1   TABLE_NAME =' mytable')'在第1行

我之后也尝试添加THEN,但问题似乎是IF。

2 个答案:

答案 0 :(得分:8)

您需要以下两个声明来执行此操作:

create table if not exists <mytable>;

truncate table <mytable>;

答案 1 :(得分:1)

所以我遇到了类似的问题,为了解决这个问题,我创建了这个程序:

DELIMITER $$
DROP PROCEDURE IF EXISTS `truncate_if_exist`$$

CREATE  PROCEDURE `truncate_if_exist`(IN tbl_name VARCHAR(150) )
  BEGIN
    IF EXISTS( SELECT 1 FROM information_schema.TABLES WHERE table_name = tbl_name AND table_schema = DATABASE()) THEN
    SET @query = CONCAT('TRUNCATE ', tbl_name);
    PREPARE stmt FROM @query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    END IF;
  END $$

DELIMITER ;

然后为每个我想截断的表调用它

例如:

CALL truncate_if_exist('users');
CALL truncate_if_exist('random_tmp_table');

显然,如果表不存在,它将不会运行TRUNCATE命令。