gpt4 book ai didi

MySQL:如果找不到表名,则从架构中删除特定表?

转载 作者:行者123 更新时间:2023-11-29 20:27:31 24 4
gpt4 key购买 nike

我有一个表格的信息模式,假设它包含

aaaa_tale
bbbb_table
cccc_table
dddd_table

我有另一个表,其中包含表名称列表。

cccc_table
bbbb_table

是否有一个我可以执行的命令,该命令允许我删除架构中未在包含表名的表中找到的表?因此,之后模式中只剩下 aaaa_table 和 dddd_table 。

最佳答案

假设具有不被删除的表列表的表被命名为“table_list”,该列表位于“table_name”列中。如果您想使用纯 SQL,您可以根据您想要在架构中保留哪些表(从您的问题中不清楚)执行以下操作之一:

案例:您想删除表列表中列出的表,以便仅保留aaaa_table和dddd_table(请参阅问题的最后一句)。

SET GROUP_CONCAT_MAX_LEN=10000; /* Adjust this as per your requirement */
SELECT CONCAT( 'DROP TABLE ',
GROUP_CONCAT(TABLE_NAME) ) INTO @drop_query
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = database()
AND TABLE_NAME IN (SELECT table_name from table_list);
SET @drop_query = IFNULL(@drop_query, 'SELECT 1');
PREPARE drop_statement FROM @drop_query;
SET foreign_key_checks = 0;
EXECUTE drop_statement;
SET foreign_key_checks = 1;
DEALLOCATE PREPARE drop_statement;

案例:您希望保留表列表中列出的表,以便仅保留 cccc_table 和 dddd_table (请参阅问题的倒数第二句,尤其是“允许我删除模式中的表在包含表名的表中找不到”)。

SET GROUP_CONCAT_MAX_LEN=10000; /* Adjust this as per your requirement */
SELECT CONCAT( 'DROP TABLE ',
GROUP_CONCAT(TABLE_NAME) ) INTO @drop_query
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = database()
AND TABLE_NAME NOT IN (SELECT table_name from table_list);
SET @drop_query = IFNULL(@drop_query, 'SELECT 1');
PREPARE drop_statement FROM @drop_query;
SET foreign_key_checks = 0;
EXECUTE drop_statement;
SET foreign_key_checks = 1;
DEALLOCATE PREPARE drop_statement;

在这两种情况下,您都可以避免黑客检查 NULL,如果找到,则通过使用存储过程在上述代码中替换为虚拟查询(“SELECT 1”)。仅当 @drop_query 不为 NULL 时,存储过程才允许您执行条件 block 。

关于MySQL:如果找不到表名,则从架构中删除特定表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39216891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com