首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当表存在时才截断表(以避免错误)

仅当表存在时才截断表(以避免错误)
EN

Stack Overflow用户
提问于 2014-08-20 07:19:29
回答 3查看 27.4K关注 0票数 10

我有一个.sql文件,用于在导出之前清除mysql schema中的缓存数据,因为当我将导出文件导入到不同的服务器时,这些表中的缓存数据是无用的。我在多个站点上使用此脚本,但在某些情况下,某些表并不存在,因为它们不是必需的。如果MySQL中只有一个表存在,我该如何截断该表呢?

代码语言:javascript
复制
TRUNCATE accesslog;
TRUNCATE cache;
TRUNCATE cache_block;
TRUNCATE cache_bootstrap;
TRUNCATE cache_customfilter;
TRUNCATE cache_field;
TRUNCATE cache_filter;
TRUNCATE cache_form;
TRUNCATE cache_image;
TRUNCATE cache_menu;
TRUNCATE cache_metatag;
TRUNCATE cache_page;
TRUNCATE cache_path;
TRUNCATE cache_token;
TRUNCATE cache_update;
TRUNCATE cache_views;
TRUNCATE cache_views_data;
TRUNCATE watchdog;

提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2014-08-20 07:27:16

See this answer on Using the IF Statement to do a conditional insert:

你能用ANSI INFORMATION_SCHEMA做同样的事情吗?

代码语言:javascript
复制
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'accesslog')
    TRUNCATE accesslog
票数 6
EN

Stack Overflow用户

发布于 2021-07-14 17:54:20

示例表名是select:在截断之前,u可以检查记录(select* from table ),在截断之后,它也会重置身份。

代码语言:javascript
复制
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Salaries')

begin

    TRUNCATE table Salaries;

end
票数 2
EN

Stack Overflow用户

发布于 2019-11-08 13:18:16

你可以尝试这个存储过程,因为没有它真的很难。

代码语言:javascript
复制
CREATE PROCEDURE tbl_delete(IN table_name CHAR(255),IN database_name CHAR(255))
BEGIN
    IF @table_name IN (SELECT table_name FROM information_schema.tables WHERE table_schema = database_name)
    THEN
        SET @query = CONCAT("TRUNCATE TABLE ", @database_name, ".", @table_name);
        PREPARE stmt FROM @query;
        EXECUTE stmt;
    END IF;
END ;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25394493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档