我有一个.sql文件,用于在导出之前清除mysql schema中的缓存数据,因为当我将导出文件导入到不同的服务器时,这些表中的缓存数据是无用的。我在多个站点上使用此脚本,但在某些情况下,某些表并不存在,因为它们不是必需的。如果MySQL中只有一个表存在,我该如何截断该表呢?
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;提前谢谢。
发布于 2014-08-20 07:27:16
See this answer on Using the IF Statement to do a conditional insert:
你能用ANSI INFORMATION_SCHEMA做同样的事情吗?
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'accesslog')
TRUNCATE accesslog发布于 2021-07-14 17:54:20
示例表名是select:在截断之前,u可以检查记录(select* from table ),在截断之后,它也会重置身份。
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Salaries')
begin
TRUNCATE table Salaries;
end发布于 2019-11-08 13:18:16
你可以尝试这个存储过程,因为没有它真的很难。
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 ;https://stackoverflow.com/questions/25394493
复制相似问题