我需要减少约20k桌子。我知道不要删除的表的名称。
如果我有表名“a,b,c,d,e,f,g ......”,我怎样才能删除列表“a,b,c”中没有的所有表格?
答案 0 :(得分:3)
您可以使用此
获取列表SELECT CONCAT("DROP TABLE ", table_name, ";")
FROM information_schema.TABLES
WHERE table_schema = <whatever your db name is>
AND table_name NOT IN (<your list>);
然后复制并粘贴!
答案 1 :(得分:2)
我建议你采取以下方法
SHOW TABLES
(或information_schema.TABLES
)DROP TABLE
命令现在您有一个可以针对数据库运行的SQL脚本
如果您是Linux shell,忍者可能希望使用uniq
,xargs
等命令行工具来操作文件。使用电子表格可能是处理它的另一种方式。
答案 2 :(得分:2)
尝试使用此方法获取SQL DROP语句的结果集:
SELECT CONCAT('DROP TABLE ', TABLE_NAME , ';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='YourDatabase'
AND TABLE_NAME NOT IN ('Table1', 'Table2');
复制并粘贴结果,您已获得20,000- n DROP语句。
答案 3 :(得分:1)
您需要从information_schema.tables运行select并创建一个游标,该游标将遍历结果并执行相应的drop(使用if语句)。这是因为drop语句不支持选择/过滤或其他选项。 (除非在过去两三年内发生了变化)
当您执行select语句时,您可以使用以下内容:
WHERE table_name NOT IN ('ssss','dddd');
另一件事是:为什么数据库中有20k表?????
答案 4 :(得分:0)
如果您能够在短时间内保持不可用的表格,我将建议采用完全不同的方法。
DROP DATABASE
包含答案 5 :(得分:0)
我今天遇到了同样的问题。以下是跳过表ABC,DEF和XYZ的一种方法:
'use strict';
module.exports = {
up: function (queryInterface, Sequelize) {
/*
Add altering commands here.
Return a promise to correctly handle asynchronicity.
Example:
return queryInterface.bulkInsert('Person', [{
name: 'John Doe',
isBetaMember: false
}], {});
*/
return queryInterface.bulkInsert('Users', [{
id: Sequelize.UUIDV4,
username: 'someone@email.com',
email: 'someone@email.com'
}], {});
},
down: function (queryInterface, Sequelize) {
/*
Add reverting commands here.
Return a promise to correctly handle asynchronicity.
Example:
return queryInterface.bulkDelete('Person', null, {});
*/
return queryInterface.bulkDelete('Users', null, {});
}
};
那么魔鬼究竟是什么呢?
答案 6 :(得分:0)
有一种更简单的方法。在一行中,在命令行上键入:
mysql -u root -p[password] --skip-column-names [database] -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='[database]' AND TABLE_NAME NOT IN ('[table 1]', '[table 2]',..'[table n]');" | cut -f1 | sed -r 's/(.*)/DROP TABLE IF EXISTS \1;/' | mysql -u root -p[password] [database]
您可能会收到两条关于在命令中包含密码的警告。如果这可能是个问题,您可以清除命令历史记录以“删除证据”: - )
history -c