我有一个.sql文件,在导出之前清除mysql架构中的缓存数据,因为当我将导出文件导入到其他服务器时,这些表中的缓存数据是无用的。我在多个站点上使用此脚本,但在某些情况下,某些表不存在,因为它们不是必需的。如果只存在该表,我如何只截断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;
提前致谢。
答案 0 :(得分:1)
您可以尝试使用此存储过程,因为没有它真的很困难。
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 :(得分:0)
示例表名称是 Salaries: 在 TRUNCATE 之前,您可以检查记录(从薪水中选择 *) 截断后它也会重置身份。
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Salaries')
begin
TRUNCATE table Salaries;
end
答案 2 :(得分:-1)
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