mysql - linux:使用 bash 工具从表中删除全文

标签 mysql linux bash

如何使用 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/

相关文章:

php - 如何从 S3 中删除

php - 数据库列内的静态值

linux - 了解 Linux 中 execve 内部结构的最佳方法是什么?

perl - 列出最小顺序的文件

bash - 将 RGB 转换为 8 位

PHP mysql 查询使用类似时间戳花费的时间太长

linux - copy_to_user 在内核模块中不起作用

c++ - 多线程单读单写fifo队列

linux - 如何用另一个 bash 脚本创建一个 bash 脚本?

php - PDO 不绑定(bind)参数