如何使用 bash 工具从 sql 文件中删除全文?
我需要克隆 myisam 表并将其转换为 INNODB,因此我无法使用
DROP FULLTEXT INDEX ON table_name
我尝试过的
sed -i 's@FULLTEXT.*.)@@g' post.sql
最佳答案
至少出于三个原因,这很难实现自动化:
CREATE TABLE `foo` (
`c` TEXT,
FULLTEXT KEY `c` (`c`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
删除 FULLTEXT KEY 行还需要删除前一行末尾的逗号。或者用其他行替换 FULLTEXT KEY 行。
字符串“FULLTEXT KEY”可能会出现在您的 SQL 脚本中的其他地方、字符串文字或注释中。因此,您必须小心误报匹配。
我们可以简单地将“FULLTEXT KEY”更改为“KEY”,但在长 VARCHAR 或 TEXT 列上声明全文索引相当常见,这对于传统索引的 1000 字节限制来说太长了.您可以使用索引前缀,但在正则表达式中选择前缀长度和处理多列索引很困难。
我会通过在创建 SQL 脚本之前删除所有 FULLTEXT 索引来解决这个问题。您可以查询所有 FULLTEXT 索引并从信息架构中生成删除语句。
例如:
SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name, '` DROP KEY `',
index_name, '`;') AS ddl
FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_schema='test' and index_type='FULLTEXT';
我的第二个选择,如果您不能更改原始数据库并且需要更改脚本,则手动在文本编辑器中编辑 SQL 脚本,而不是尝试使其自动化.这使您有机会检查每个案例并以正确的方式对其进行编辑。
如果您的 SQL 脚本是一个非常大的文件,您可能需要仔细选择您的文本编辑器。
关于mysql - linux:使用 bash 工具从表中删除全文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14032662/